如何由于SAS中的结果交错而折叠重复的行

问题描述 投票:-1回答:1

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

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

我在如何做到这一点上处于空白!

sql join sas pivot left-join
1个回答
2
投票

您想使用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
© www.soinside.com 2019 - 2024. All rights reserved.