ITPub博客

首页 > 数据库 > Oracle > 用listagg函数分组实现列转行

用listagg函数分组实现列转行

原创 Oracle 作者:llnnmc 时间:2019-02-13 13:53:28 0 删除 编辑

listagg是Oracle 11.2中新增的函数,listagg可以对order by子句中指定的每个组内的数据进行排序,然后连接这些列的值。以下是简单的应用举例:

SELECT deptno, listagg(ename, ',') WITHIN GROUP(ORDER BY ename) AS employees FROM scott.emp GROUP BY deptno;

可以在livesql.oracle.com云平台中体验:

再看以下的查询,包含了重复值:

select d.dname, listagg(e.job, ',') within group(order by e.job) jobs from scott.dept d, scott.emp e where d.deptno = e.deptno group by d.dname;

Oracle 19C做了一个小改进,可以方便的对转换结果去重,支持distinct关键字:

select d.dname, listagg(distinct e.job, ',') within group(order by e.job) jobs from scott.dept d, scott.emp e where d.deptno = e.deptno group by d.dname;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28974745/viewspace-2629901/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 数据泵导出导入
请登录后发表评论 登录
全部评论

注册时间:2016-12-29

  • 博文量
    101
  • 访问量
    111618