问题描述
所以我想念distinct的基本理解。 我想要做的是从多个左外连接中区分 azkey、bzkey 和 ytr。 语法如下所示:
SELECT
substr(aa.keyy,9,-9) AS azkey,REGEXP_SUBSTR(bb.rfkey,'[^*]+',1,3) AS bzkey,(NVL(ba,0) + NVL(dmo,0) + NVL(cmo,0) + NVL(bally,0)) AS ytr
FROM
tabletableaa
LEFT OUTER JOIN Table1 bb
ON aa.keyy = bb.don_key
LEFT OUTER JOIN table cc
ON aa.key = cc.cc_key
AND aa_anothercolumn = cc.anothercolumn
LEFT OUTER JOIN Table1 dd
ON aa.key = dd.dd_key
这样做的最佳做法是什么?我一直在努力:
SELECT disTINCT
(substr(a.keyy,-9)) as azkey,REGEXP_SUBSTR(distinct(b.rfkey),3) as bzkey
(NVL(ba,0)+NVL(dmo,0)+NVL(cmo,0)+NVL(bally,0)) as ytr
我收到了他的消息:
上下文配置单元不支持不同的关键字
我所得到的和想要的结果的例子:
我有什么:
azkey bzkey ytr
100 cx 356
100 cx null
101 tr 796
101 null null
101 null 998
102 cd 453
103 df 224
104 kq 756
预期结果:
azkey bzkey ytr
100 cx 356
101 tr 796
102 cd 453
103 df 224
104 kq 756
解决方法
如果您不需要 bzkey 中的 NULL,请考虑将 LEFT JOIN 替换为 bb 和 INNER JOIN。或者,如果您需要 LEFT JOIN,请尝试过滤 WHERE bzkey is not null
还使用 max() 组按 azkey、bzkey 聚合 ytr - 它将删除重复项和空值:
SELECT
substr(aa.keyy,9,-9) AS azkey,REGEXP_SUBSTR(bb.rfkey,'[^*]+',1,3) AS bzkey,max((NVL(ba,0) + NVL(dmo,0) + NVL(cmo,0) + NVL(bally,0))) AS ytr
FROM
tabletableaa
INNER JOIN Table1 bb
ON aa.keyy = bb.don_key
LEFT OUTER JOIN table cc
ON aa.key = cc.cc_key
AND aa_anothercolumn = cc.anothercolumn
LEFT OUTER JOIN Table1 dd
ON aa.key = dd.dd_key
GROUP BY substr(aa.keyy,-9),3)