-1

我有一个看起来像这样的数据集(table2):

CUSTOMER   LEGACY_ID  LEGACY_ID_DESC
00001      T121212    COLL_NUM
00001      23232      OTHER_NUM
00001      C22222     ORIG_NUM
00001      45454      OTHER_NUM
00002      U64646     COLL_NUM
00002      C44444     ORIG_NUM

我正在尝试通过执行以下操作将此表连接到另一个表:

CREATE TABLE &SYSUSERID..&SYSUSERID._NEW_TABLE as
SELECT DISTINCT CASE WHEN L.LEGACY_ID_DESC = 'COLL_NUM' THEN L.LEGACY_ID ELSE '.' END AS COLL_NUM,
       CASE WHEN L.LEGACY_ID_DESC ='OTHER_NUM' THEN L.LEGACY_ID ELSE '.' END AS OTHER_NUM,
       CASE WHEN L.LEGACY_ID_DESC = 'ORIG_NUM' THEN L.LEGACY_ID ELSE '.' END AS ORIG_NUM,
       T.CUSTOMER,
       CASE WHEN L.LEGACY_ID_DESC = 'TRMNTN_NUM' THEN L.LEGACY_ID ELSE '.' END AS TRMNTN_NUM,
       T.FIRST_NAME, 
       T.LAST_NAME,
       T.CITY,
       T.STATE
FROM &SYSUSERID..&SYSUSERID._TABLE1 T LEFT JOIN
     &SYSUSERID..&SYSUSERID._TABLE2 L
            ON T.CUSTOMER=L.CUSTOMER;

这是我得到的结果:

COLL_NUM   OTHER_NUM   ORIG_NUM   CUSTOMER   TRMNTN_NUM   FIRST_NAME   LAST_NAME   CITY   STATE
t121212    .           .          00001      .            TOM          PETTY       ANY    AL
.          23232       .          00001      .            TOM          PETTY       ANY    AL
.          45454       .          00001      .            TOM          PETTY       ANY    AL
.          .           C22222     00001      .            TOM          PETTY       ANY    AL
.          .           .          00001      .            TOM          PETTY       ANY    AL
U64646     .           .          00002      .            BETTY        WHITE       POM    CT
.          .           C44444     00002      .            BETTY        WHITE       POM    CT
.          .           .          00002      .            BETTY        WHITE       POM    CT
U64646     .           .          00002      .            BETTY        WHITE       FORK   MA
.          .           C44444     00002      .            BETTY        WHITE       FORK   MA
.          .           .          00002      .            BETTY        WHITE       FORK   MA

这是我想要的结果:

COLL_NUM   OTHER_NUM   ORIG_NUM   CUSTOMER   TRMNTN_NUM   FIRST_NAME   LAST_NAME   CITY   STATE
t121212    23232       C22222     00001      .            TOM          PETTY       ANY    AL
t121212    45454       C22222     00001      .            TOM          PETTY       ANY    AL
U64646     .           C44444     00002      .            BETTY        WHITE       POM    CT
U64646     .           C44444     00002      .            BETTY        WHITE       FORK   MA

我在如何实现这一点上画了一个空白!

4

1 回答 1

1

您想使用GROUP BY而不是DISTINCT. 每个CASE表达式都应该放在一个聚合函数中(通常是MAX()),其他列放在GROUP BY子句中。

聚合保证GROUP BY子句中每个列的值元组只生成一条记录,而聚合函数忽略NULL值。这种技术称为条件聚合

CREATE TABLE &SYSUSERID..&SYSUSERID._NEW_TABLE as
SELECT 
    MAX(CASE WHEN L.LEGACY_ID_DESC = 'COLL_NUM' THEN L.LEGACY_ID ELSE '.' END) AS COLL_NUM,
    MAX(CASE WHEN L.LEGACY_ID_DESC ='OTHER_NUM' THEN L.LEGACY_ID ELSE '.' END) AS OTHER_NUM,
    MAX(CASE WHEN L.LEGACY_ID_DESC = 'ORIG_NUM' THEN L.LEGACY_ID ELSE '.' END) AS ORIG_NUM,
    T.CUSTOMER,
    MAX(CASE WHEN L.LEGACY_ID_DESC = 'TRMNTN_NUM' THEN L.LEGACY_ID ELSE '.' END) AS TRMNTN_NUM,
    T.FIRST_NAME, 
    T.LAST_NAME,
    T.CITY,
    T.STATE
FROM &SYSUSERID..&SYSUSERID._TABLE1 T 
LEFT JOIN &SYSUSERID..&SYSUSERID._TABLE2 L ON T.CUSTOMER=L.CUSTOMER
GROUP BY 
    T.CUSTOMER,    
    T.FIRST_NAME, 
    T.LAST_NAME,
    T.CITY,
    T.STATE
于 2020-01-17T22:16:41.023 回答