如何解决从不重复
我有以下查询...
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。