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

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM