色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

如何用oracle實現(xiàn)行列轉(zhuǎn)換

張吉惟2年前13瀏覽0評論

如何用oracle實現(xiàn)行列轉(zhuǎn)換?

這個問題我可以回答您。

在oracle中有兩個牛逼的函數(shù),分別是:wmsys.wm_concat和

scott.listagg

, 可以實現(xiàn)行列轉(zhuǎn)換,非常簡單,也是我們?nèi)粘i_發(fā)及運(yùn)維工作中經(jīng)常用得到的兩個函數(shù)。

wm_concat是oracle 10g推出的一個行列轉(zhuǎn)換函數(shù),而

scott.listagg

是oracle 11g中推出的,兩者作用一樣,但使用上稍有差異。

例子:

我們創(chuàng)建一個員工信息表:EMP,表中有三個字段,分別是:

EMPNO:員工編號

NAME:員工姓名

DEPTNO:部門編號

建表SQL:

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

手動插入部分?jǐn)?shù)據(jù):

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');

現(xiàn)在我們的需求是要通過SQL查出每一個部門下都有哪些員工,員工要求在一行展示,員工之間用逗號隔開。

1、函數(shù) wmsys.wm_concat

用法:wmsys.wm_concat(列名),該函數(shù)可以把列值用逗號隔開,在一行顯示。

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

結(jié)果:已經(jīng)達(dá)我們的預(yù)期。

2、函數(shù)

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

結(jié)果:也達(dá)到我們的預(yù)期。

感謝聆聽,如果還有什么疑問,請在評論區(qū)留言,看到會回復(fù),謝謝!