我有一个看起来像这样的数据集(表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
我在如何做到这一点上处于空白!
您想使用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