我在 oracle sql 中有一个简单的示例查询 如何将所有电子邮件地址集中在一个 ID 下
SELECT
DISTINCT(E.ID),
CASE WHEN G.EMAIL_CODE='EMAIL' THEN G.EMAIL_ADDRESS END AS EMAIL1,
CASE WHEN G.EMAIL_CODE='ABCE' THEN G.EMAIL_ADDRESS END AS EMAIL2
FROM EMPLOYEE E
INNER JOIN GENERAL_EMAIL G ON (G.ID=E.ID)
GROUP BY
E.ID,
G.EMAIL_CODE,
G.EMAIL_ADDRESS
ORDER BY E.ID;
如果要将值聚合到一行中,请使用
GROUP BY
和 LISTAGG
:
SELECT E.ID,
LISTAGG(G.EMAIL_ADDRESS, ',') WITHIN GROUP (ORDER BY G.EMAIL_ADDRESS)
AS emails
FROM EMPLOYEE E
INNER JOIN GENERAL_EMAIL G ON (G.ID=E.ID)
GROUP BY E.ID
ORDER BY E.ID;
或者,使用条件聚合:
SELECT E.ID,
LISTAGG(
CASE WHEN G.EMAIL_CODE='EMAIL' THEN G.EMAIL_ADDRESS END,
','
) WITHIN GROUP (ORDER BY G.EMAIL_ADDRESS) AS email1,
LISTAGG(
CASE WHEN G.EMAIL_CODE='ABCDE' THEN G.EMAIL_ADDRESS END,
','
) WITHIN GROUP (ORDER BY G.EMAIL_ADDRESS) AS email2
FROM EMPLOYEE E
INNER JOIN GENERAL_EMAIL G ON (G.ID=E.ID)
GROUP BY E.ID
ORDER BY E.ID;