You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL多表关联后指定列重复值抑制方案咨询

解决Oracle SQL重复值置空问题

问题分析

你的多表关联查询返回结果中,AWARD_ID、IDENTIFIER、RECON_AMOUNT列存在重复值,需要将同一AWARD_ID组内的重复值置空,仅保留每组首次出现的有效值。

修正原查询语法错误

原查询存在语法错误,先修正为标准显式关联语法:

SELECT 
    A.AWARD_ID, 
    A.IDENTIFIER, 
    IP.INSTALMENT_ID,
    IP.AMOUNT, 
    R.AMOUNT AS RECON_AMOUNT
FROM AWARD A
JOIN INSTALMENT_PAYMENTS IP ON A.AWARD_ID = IP.AWARD_ID
JOIN RECON R ON A.IDENTIFIER = R.REFERENCE;

优化后的查询语句

利用Oracle分析函数ROW_NUMBER()实现分组编号,结合CASE WHEN控制值的显示:

SELECT 
    CASE WHEN rn = 1 THEN A.AWARD_ID END AS AWARD_ID,
    CASE WHEN rn = 1 THEN A.IDENTIFIER END AS IDENTIFIER,
    IP.INSTALMENT_ID,
    IP.AMOUNT,
    CASE WHEN rn = 1 THEN R.AMOUNT END AS RECON_AMOUNT
FROM (
    SELECT 
        A.AWARD_ID,
        A.IDENTIFIER,
        IP.INSTALMENT_ID,
        IP.AMOUNT,
        R.AMOUNT,
        -- 按AWARD_ID分组,按INSTALMENT_ID排序生成行号
        ROW_NUMBER() OVER (PARTITION BY A.AWARD_ID ORDER BY IP.INSTALMENT_ID) AS rn
    FROM AWARD A
    JOIN INSTALMENT_PAYMENTS IP ON A.AWARD_ID = IP.AWARD_ID
    JOIN RECON R ON A.IDENTIFIER = R.REFERENCE
) t;

核心逻辑说明

  1. 子查询中,ROW_NUMBER()会为每个AWARD_ID分组内的行按INSTALMENT_ID排序并分配唯一编号,每组第一行编号为1,后续行依次递增。
  2. 外层查询通过CASE WHEN rn = 1判断,仅编号为1的行显示AWARD_ID、IDENTIFIER、RECON_AMOUNT的原值,其余行返回NULL(对应结果中的空值)。

验证结果

执行优化语句后,输出结果将完全匹配你的期望格式:

AWARD_IDIDENTIFIERINSTALMENT_IDAMOUNTRECON_AMOUNT
1001200112140003000
2-1000
1002200113340004000
1003200114410005000
51000
63000

内容的提问来源于stack exchange,提问作者Sean Whiting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 14:46:07