Sql 根据一列中的值选择两个新列
我有两个表,一个是人员数据,另一个是这些人员的外部代码。这些外部代码可以是数字(N表示数字代码)或字母数字(S表示短代码)。它们通过合作伙伴id连接 对于每个人,我都应该返回“partner\u id”、“birth\u date”、“numeric\u ext\u code”(如果存在,则为null)[如果ext\u code的类型为N]和“short\u ext\u code”(如果存在,则为null)[如果ext\u code的类型为S] 因为每种类型的外部代码只有一列,所以我需要将这一列“拆分”为两个-数字代码和短代码。我该怎么做?如果需要,我可以提供更多信息 样本数据: 例如,您可以看到一个人可以同时拥有数字和字母数字代码 预期结果:Sql 根据一列中的值选择两个新列,sql,oracle,Sql,Oracle,我有两个表,一个是人员数据,另一个是这些人员的外部代码。这些外部代码可以是数字(N表示数字代码)或字母数字(S表示短代码)。它们通过合作伙伴id连接 对于每个人,我都应该返回“partner\u id”、“birth\u date”、“numeric\u ext\u code”(如果存在,则为null)[如果ext\u code的类型为N]和“short\u ext\u code”(如果存在,则为null)[如果ext\u code的类型为S] 因为每种类型的外部代码只有一列,所以我需要将这一列
PARTNER_ID | BIRTH_DATE | NUMERIC_EXT_CODE | SHORT_EXT_CODE
10000008611 | 15.01.63 | 0000000000000000090655955 | test11
(很抱歉格式不好,我不知道更好的方法)您可以使用条件聚合:
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
请提供样品数据和期望的结果。工作完美。有没有不使用case就可以实现这一点的方法?@HeartCore很高兴听到。你也可以把它写成一个
PIVOT
查询,但它会更复杂。有没有办法用外部连接来实现这一点?我发现了一个小问题。它不会选择既没有设置数字也没有设置短代码的代码。@HeartCore在这种情况下,您需要将左连接到外部。