listagg within group函数为Oracle特有的分析函数,将列转为行
直接上例子
oracle自带emp表
需求:我们想得到部门(DEPTNO)为20和30的员工姓名(ENAME),并将员工姓名转为一行
sql:
SELECT
T .DEPTNO,
listagg (T .ENAME, '|') WITHIN GROUP (ORDER BY T .ENAME) names
FROM
EMP T
WHERE
T .DEPTNO in ('20','30')
GROUP BY
T .DEPTNO
需求:将各个职业的姓名,用一行来展示
sql:
select t.job,listagg(t.ename,',') within group(order by t.ename)as name from emp t GROUP BY t.job
参考:https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030