Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据一列中的值选择两个新列_Sql_Oracle - Fatal编程技术网

Sql 根据一列中的值选择两个新列

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] 因为每种类型的外部代码只有一列,所以我需要将这一列

我有两个表,一个是人员数据,另一个是这些人员的外部代码。这些外部代码可以是数字(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在这种情况下,您需要将
左连接到
外部