Oracle SQL 如何将所有电子邮件地址集中在一个 ID 下

问题描述 投票:0回答:1

我在 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;



oracle-sqldeveloper
1个回答
0
投票

如果要将值聚合到一行中,请使用

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;
© www.soinside.com 2019 - 2024. All rights reserved.