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

  

 

posted @ 2019-06-26 16:42  深如墨&淡如水  阅读(14134)  评论(2编辑  收藏  举报