Oracle查询中将结果列按分组用逗号隔开,拼接成一行(listagg函数)
在Oracle的select查询中,我们经常遇到将结果进行分组,某个字段按照分组用逗号隔开,拼接成一行显示,如下:
A B
a 1
a 2
b 3
b 4
A、B两列是查询结果,现要展示成如下:
A B
a 1,2
b 3,4
可以使用listagg函数:
select A,listagg(B,',') within group (order by B) as B from table group by A
如果将select出来的一列全部转成行,那么group by语句都不需要:
select listagg(B,',') within group (order by B) as B from table
结果是 1,2,3,4
而且这个listagg函数可以放在查询语句的子查询里面,很方便
select id,loginid, (select listagg(h1.id,',') within group (order by h1.id) from hrmresource h1 where h1.managerid = h.id) str from hrmresource h