我有两个表,一个表包含人员数据,一个表具有这些人员的外部代码。这些外部代码可以是数字(对于数字代码为N)或字母数字(对于短代码为S)。他们加入了partner_id。
我应该为每个人返回“ partner_id”,“ birth_date”,“ numeric_ext_code”(如果存在,否则为null)列(如果ext_code的类型为N)和“ short_ext_code”(如果存在) ,否则为null)[如果ext_code的类型为S]。
由于每种类型的外部代码只有一列,因此我需要将这一列“拆分”为两个-numeric_ext_code和short_ext_code。我该怎么做呢?如果需要,我可以提供更多信息。
样本数据:
示例,您可以看到一个人可以同时具有数字和字母数字代码。
所需结果:
PARTNER_ID | BIRTH_DATE | NUMERIC_EXT_CODE | SHORT_EXT_CODE
10000008611 | 15.01.63 | 0000000000000000090655955 | test11
(对不起,格式不好,我不知道有什么更好的方法)
答案 0 :(得分:1)
您可以使用条件聚合:
SELECT PARTNER_ID, BIRTH_DATE,
MAX(CASE WHEN ext_code = 'N' THEN ext_code ELSE NULL END) AS NUMERIC_EXT_CODE,
MAX(CASE WHEN ext_code = 'S' THEN ext_code ELSE NULL END) AS SHORT_EXT_CODE
FROM Person P
JOIN External E ON P.PARTNER_ID = E.PARTNER_ID
GROUP BY PARTNER_ID, BIRTH_DATE