Oracle列转行 LISTAGG和WM_CONCAT

有表结构

Columns_A  Columns_B
AAA        1111
AAA        2222
BBB        3333
CCC        4444
CCC        5555

1、WM_CONCAT用法

函数在10版本推出,可以把列值以英文逗号分隔起来并显示成一行例如:A,B,C,D 这种格式
运行后的返回结果根据oracle的版本不同而会字段类型不同,在oracle11g中返回clob型,在oracle10g中返回varchar型
用法:WM_CONCAT("列名")
例子:
SELECT T.Columns_A,TO_CHAR(WM_CONCAT(T.Columns_B)) FROM TABLE_NAME T GROUG BY T.COLUMS_A
结果:
AAA   1111,2222
BBB   3333
CCC   4444,5555

2、LISTAGG用法(推荐)

LISTAGG函数是在11g2以后才有的
不支持distinct,拼接长度不能大于4000,函数返回为varchar2类型,最大长度为4000
用法:LISTAGG(columnName,"分隔符") WITHIN GROUP(ORDER BY "排序规则")
例子:
SELECT T.Columns_A ,LISTAGG(T.Columns_B,',') WITHIN GROUP(ORDER BY T.Columns_A) FROM TABLE_NAME T GROUP BY T.Columns_A
结果:
AAA   1111,2222
BBB   3333
CCC   4444,5555

转载于:https://my.oschina.net/HowellLiu/blog/1973405

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值