Oracle行转列函数:wm_concat与listagg的使用

两个函数功能都是将行转列:

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         张三,李四

 

你可能感兴趣的:(oracle,数据库,Java)