当前位置:   article > 正文

oracle中行转列LISTAGG()函数详解_listagg函数用法

listagg函数用法

1.LISTAGG()函数作为普通函数使用时就是查询出来的结果列转为行

  1. SELECT
  2. LISTAGG ( NAME_CHS, ',' ) within GROUP ( ORDER BY ROWNUM ) name
  3. FROM
  4. GSPUSER
  5. WHERE
  6. ROWNUM <= 10

2.LISTAGG()作为分组函数使用

例如,把每个班组下面的人员拼接成一行

  1. SELECT
  2. b.MOMTEAMNAME,
  3. LISTAGG ( g.NAME_CHS, ',' ) WITHIN GROUP ( ORDER BY b.MOMTEAMNAME ) res
  4. FROM
  5. DGMOMPTDGMOMGLHQYBZGL b
  6. LEFT JOIN DGMOMPTABOUTUSERS u ON b.ID = u.PARENTID
  7. LEFT JOIN GSPUSER g ON u.MOMEMPLOYEEID = g.ID
  8. WHERE
  9. b.MOMDATASTATE = 0
  10. AND u.MOMDATASTATE = 0
  11. GROUP BY
  12. b.MOMTEAMNAME

3.LISTAGG()做分析函数使用

例如,查询每个班组下面有哪些人,统计每组人数量

  1. SELECT
  2. MOMTEAMNAME,RES,COUNT
  3. FROM(
  4. SELECT
  5. b.MOMTEAMNAME,
  6. LISTAGG ( g.NAME_CHS, ',' ) WITHIN GROUP ( ORDER BY b.MOMTEAMNAME ) over(partition by b.MOMTEAMNAME) res,
  7. count(g.NAME_CHS) over(partition by b.MOMTEAMNAME) count,
  8. row_number() over(partition by b.MOMTEAMNAME ORDER BY ROWNUM) rn
  9. FROM
  10. DGMOMPTDGMOMGLHQYBZGL b
  11. LEFT JOIN DGMOMPTABOUTUSERS u ON b.ID = u.PARENTID
  12. LEFT JOIN GSPUSER g ON u.MOMEMPLOYEEID = g.ID
  13. WHERE
  14. b.MOMDATASTATE = 0
  15. AND u.MOMDATASTATE = 0
  16. ) WHERE rn = 1

以上是个人开发中遇到的情况,有不当之处还请指正,欢迎评论区讨论

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/594867
推荐阅读
相关标签
  

闽ICP备14008679号