从不重复

问题描述

我有以下查询...

SELECT           
      DEP.CUST_ORG_CD,DEP.CUST_NO,DEP.DP_ACT_NO
FROM R_DBLNK_US.DW_TRN_DEPO_ACC_D DEP

UNION

SELECT
      DEP.CUST_ORG_CD,DEP.DP_ACT_NO
FROM R_DBLNK_US.DW_MST_ACC_D DEP

...返回两行(每个表各一个

CUST_ORG_CD    CUST_NO    ACT_NO
5              321        8
5              321        9

我存储在临时表中。然后,我想返回所有三列,但在前两列上使用disTINCT,这样在这种情况下将不返回第二行。

解决方法

我建议在第二个子查询中使用not exists,以过滤出与前两列中第一个结果集匹配的记录。

select cust_org_cd,cust_no,dp_act_no
from r_dblnk_us.dw_trn_depo_acc_d
union all
select cust_org_cd,dp_act_no
from r_dblnk_us.dw_mst_acc_d d2
where not exists (
    select 1
    from r_dblnk_us.dw_trn_depo_acc_d d1
    where d1.cust_org_cd = d2.cust_org_cd and d1.cust_no = d2.cust_no
)

旁注:我将union更改为union all;除非子查询本身生成重复项,否则不会更改结果集,并且效率更高。

,

可能我建议使用如下所示的内容来定义要保留的内容,然后通过WHERE RowNumber = 1进行过滤

    ROW_NUMBER() OVER (PARTITION BY CUST_ORG_CD,CUST_NO ORDER BY ACT_NO) AS RowNumber