两个函数功能都是将行转列:
wm_concat 返回值为clob,多个值以逗号分隔;listagg 返回值为varchar,可以指定分隔符
例如部门表 table_dept 表中 dept_no 为 d1 的有两条记录,emp_name 分别是张三和李四,查询:
select dept_no 部门编号, emp_name 员工姓名
from table_dept
where dept_no = 'd1'
结果为:
部门编号 员工姓名
d1 张三
d1 李四
现将部门 d1 下的员工以一条数据显示,既多行员工姓名转换成一列显示
1、使用 wm_concat
select dept_no 部门编号, to_char( wm_concat( emp_name ) ) 员工姓名
from table_dept
where dept_no = 'd1'
group by dept_no
2、使用 listagg
select dept_no 部门编号,
listagg( emp_name, ',' ) within group ( order by dept_no ) 员工姓名
from table_dept
where dept_no = 'd1'
group by dept_no
结果为
部门编号 员工姓名
d1 张三,李四