Oracle SQL中如何通过同一标识符合并同一列的两个值?
在Oracle SQL中实现一次性合并的方案
完全可以在Oracle SQL中直接完成这个需求,无需导出到Excel手动合并,以下提供两种常用实现方式:
方法1:使用LISTAGG聚合函数(Oracle 11g及以上版本适用)
LISTAGG是Oracle专门用于字符串聚合的函数,能按指定分组拼接字段值,非常适配这个场景:
SELECT UPPER(Address) AS ADDRESS, LISTAGG(NAME, ' ') WITHIN GROUP (ORDER BY NAME_TYPE) AS FULL_NAME FROM 你的表名 GROUP BY Address ORDER BY Address;
说明:
UPPER(Address)将地址统一转为大写,匹配期望结果的格式LISTAGG(NAME, ' ')用空格拼接名字,WITHIN GROUP (ORDER BY NAME_TYPE)确保先拼接名(FIRST)再拼接姓(LAST)- 按
Address分组,保证同一地址的两条记录合并为一行
方法2:使用自连接(兼容低版本Oracle)
如果你的Oracle版本低于11g,不支持LISTAGG,可以通过自连接关联同地址的名和姓:
SELECT UPPER(a.Address) AS ADDRESS, a.NAME || ' ' || b.NAME AS FULL_NAME FROM 你的表名 a JOIN 你的表名 b ON a.Address = b.Address WHERE a.NAME_TYPE = 'FIRST' AND b.NAME_TYPE = 'LAST' ORDER BY a.Address;
说明:
- 通过自连接将同一地址下的「名」记录和「姓」记录关联
- 用
||运算符拼接名和姓,生成全名 UPPER函数统一地址的大小写格式
两种方法都能直接输出你期望的查询结果,无需额外的Excel操作。
内容的提问来源于stack exchange,提问作者Alex Segovia
相关产品推荐
相关产品推荐

