您现在的位置是:网站首页>>信息浏览 文章详情

使用oracle的 listagg() WITHIN GROUP ()函数让多行转一列,行转列
2019-05-31 10:32 许多年以后 1524

基础的用法如下:
LISTAGG(1,2) WITHIN GROUP( ORDER BY 3)
1的位置是需要拼接的数据表中的字段
2的位置是以什么字符分割,例如逗号,分号等字符
1与3的位置是相同的字段
它的用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来,当然也可以不用Group by语句,只查询一个字段,那么就把所有的行拼接起来成为一行。

例如:
普通查询:

  1. //条件查询 查询部门为20的员工列表
  2. SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20' ;

结果:
VQg3zF.png

使用 listagg() WITHIN GROUP ()

  1. SELECT
  2. T .DEPTNO,
  3. listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names
  4. FROM
  5. SCOTT.EMP T
  6. WHERE
  7. T .DEPTNO = '20'
  8. GROUP BY
  9. T .DEPTNO

结果:
VQg1RU.png

注意 如果你只是只要显示listagg() WITHIN GROUP ()这个字段,就不用GROUP BY T .DEPTNO,如:

  1. SELECT
  2. listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) names
  3. FROM
  4. SCOTT.EMP T
  5. WHERE
  6. T .DEPTNO = '20'

只要一个字段就行

赞 (37)
文章出处:书生个人博客          转载注明下哦!o(≧v≦)o~~

标签: oracle行转列

相似文章:


随便说两句
请先登录
遵守国家法律法规,请勿回复无意义内容,请不要回复嵌套过多的楼层!