引用另一个表时如何使用不同的配置单元

问题描述

所以我想念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)