Bootstrap

Oracle多行数据合并为一行数据

1、VM_CONCAT()

-- 默认分隔符为','
oralce> select WM_CONCAT(DM) from TALBE
> 0,1,2,9

2、LISTAGG()

-- 方案二只适合11g之后的版本
oralce> select LISTAGG(DM, ',') within group(order by DM desc ) from TALBE
> 9,2,1,0

注意

使用LISTAGG 如果返回的结果长度超过4000则会出现这个问题。
ORA-01489: 字符串连接的结果过长
如何解决呢?XMLAGG+XMLPARSE 处理

3、XMLAGG+XMLPAESE

oralce> select XMLAGG(XMLPARSE(CONTENT COLOUM||',' WELLFORMED ) ORDER BY COLOUM).getClobval () from TALBE
# 返回的结果集是 A,B,C, 他并不会像LISTAGG把最后一个的分隔符给去掉。我们可以使用RTIRM来把最后一个分隔符给去掉,
select RTRIM(XMLAGG(XMLPARSE(CONTENT COLOUM||',' WELLFORMED ) ORDER BY COLOUM).getClobval (),',') from TALBE
# 返回结果 A,B,C
;