You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL如何将同一ID下的所有邮箱地址合并

解决Oracle同一ID下邮箱地址合并的两种方案

针对你的需求,这里提供两种常用的实现方式:

方案1:将同一ID下所有邮箱合并为单个字符串(逗号分隔)

使用Oracle内置的LISTAGG函数可以快速将多行数据合并为一行,示例如下:

SELECT
    E.ID,
    LISTAGG(G.EMAIL_ADDRESS, ', ') WITHIN GROUP (ORDER BY G.EMAIL_CODE) AS ALL_EMAILS
FROM EMPLOYEE E
INNER JOIN GENERAL_EMAIL G ON G.ID = E.ID
GROUP BY E.ID
ORDER BY E.ID;
  • LISTAGG(字段, 分隔符):指定要合并的字段和分隔符
  • WITHIN GROUP (ORDER BY ...):可选,控制合并后邮箱的排序顺序

方案2:按邮箱类型分别展示为不同列(如EMAIL1、EMAIL2)

如果需要保留不同EMAIL_CODE对应的邮箱作为独立列,可以用MAX结合CASE语句,同时调整分组逻辑:

SELECT
    E.ID,
    MAX(CASE WHEN G.EMAIL_CODE = 'EMAIL' THEN G.EMAIL_ADDRESS END) AS EMAIL1,
    MAX(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
ORDER BY E.ID;
  • 这里用MAX聚合函数来筛选每个ID下对应类型的唯一邮箱(如果同一ID同一类型有多个邮箱,会取最大值;如果只有一个,就取对应值)
  • 原查询的问题在于GROUP BY包含了G.EMAIL_CODE和G.EMAIL_ADDRESS,导致无法按ID聚合,去掉这两个字段即可实现按ID分组展示不同类型邮箱

内容的提问来源于stack exchange,提问作者LogicAndArt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:27:05