ORACLE列值合并

目录

合并列值最通用的方法就是写一个自定义函数去实现,这里介绍的是其他方法。

准备数据

CREATE TABLE MyTest(xType NUMBER,City varchar2(200));
/

INSERT INTO MyTest(xType,City)
SELECT 1,'北京' FROM dual UNION ALL
SELECT 1,'上海' FROM dual UNION ALL
SELECT 1,'广州' FROM dual UNION ALL
SELECT 2,'武汉' FROM dual UNION ALL
SELECT 2,'杭州' FROM dual UNION ALL
SELECT 2,'厦门' FROM dual
COMMIT;

使用wm_Concat(不推荐,新版本不一定可用)

SELECT xType,wmsys.wm_concat(to_char(City)) AS xCity
FROM MyTest
GROUP BY xType

使用ListAgg

SELECT xType
       ,ListAgg(City,',') WITHIN GROUP(ORDER BY city) AS xCity
FROM MyTest
GROUP BY xType

结果:

xType xCity
----- --------------
    1 上海,北京,广州
    2 厦门,杭州,武汉

说明

  • 上面在City列前都加了To_Char()函数,是为了防止出现乱码的情况
  • wm_concat 在ORACEL的官方文档中没有,不能保证各版本的兼容性
  • ListAgg是11g版本才出现的新的聚集函数