200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 如何用oracle实现行列转换 – 数据库 – 前端

如何用oracle实现行列转换 – 数据库 – 前端

时间:2022-10-01 04:28:40

相关推荐

如何用oracle实现行列转换 – 数据库 – 前端

这个问题偶可以回答您。

在oracle中有两个牛逼的函数,分别是:wmsys.wm_concat和

scott.listagg

, 可以实现行列转换,非常简单,也是大家日常开发及运维工作中经常用得到的两个函数。

wm_concat是oracle 10g推出的一个行列转换函数,而

scott.listagg

是oracle 11g中推出的,两者作用一样,但使用上稍有差异。

例子:

大家创建一个员工信息表:EMP,表中有三个字段,分别是:

EMPNO:员工编号

NAME:员工姓名

DEPTNO:部门编号

建表SQL:

create table EMP (empNo varchar(50),name varchar(30),deptNo varchar2(50));

手动插入部分数据:

insert into EMP values(’11’,’ZK01′,’1′);insert into EMP values(’12’,’ZK02′,’2′);insert into EMP values(’13’,’ZK03′,’3′);insert into EMP values(’14’,’ZK04′,’4′);insert into EMP values(’15’,’ZK05′,’1′);insert into EMP values(’16’,’ZK06′,’2′);insert into EMP values(’17’,’ZK07′,’3′);insert into EMP values(’18’,’ZK08′,’4′);insert into EMP values(’19’,’ZK09′,’1′);insert into EMP values(’20’,’ZK10′,’2′);insert into EMP values(’21’,’ZK11′,’3′);insert into EMP values(’22’,’ZK12′,’4′);insert into EMP values(’23’,’ZK13′,’5′);

现在大家的需求是要通过SQL查出每一个部门下都有哪些员工,员工要求在一行展示,员工之间用逗号隔开。

1、函数 wmsys.wm_concat

用法:wmsys.wm_concat(列名),该函数可以把列值用逗号隔开,在一行显示。

select T1.deptno,to_char(wmsys.wm_concat(T1.name)) from emp T1 group by T1.deptno order by T1.deptno asc

结果:已经达大家的预期。

2、函数

scott.listagg

用法:listagg(列名,分隔符) + within group(order by 列名)

select T1.deptno,listagg(T1.name, ‘,’) within group(order by T1.deptno) name from emp T1 group by T1.deptno order by T1.deptno asc

结果:也达到大家的预期。

感谢聆听,如果还有什么疑问,请在评论区留言,看到会回复,谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。