用listagg函式分組實現列轉行

llnnmc發表於2019-02-13

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章