oracle中的行轉列函式

2021-09-20 04:50:04 字數 1155 閱讀 2593

**:

最近專案需要進行行轉列,經過上網查資料發現了wmsys.wm_concat和listagg函式,在這分享給大家

wmsys.wm_concat是oracle 10g推出的,用來連線字串,listagg是oracle 11g推出的,它的作用和wmsys.wm_concat是一樣的,但是他不支援listagg。

現在以oracle的emp表為例,現在emp標的結構如下圖:

如果我們想要查詢出每個部門都有哪些員工,如下**的結構,就需要用wmsys.wm_concat或listagg函式了。

deptno

ename

clark,miller,king

smith,ford,adams,scott,jones

allen,james,turner,blake,martin,ward

(**1)

1、wmsys.wm_concat的用法:

select deptno,wmsys.wm_concat(ename) ename from emp group by deptno;

wmsys.wm_concat()中的引數也可以使多個,使用」||」拼接,如下例子:

select deptno,wmsys.wm_concat(ename || '-' || job) name from emp group by deptno;

執行的結果如下**:

deptno

ename

clark-manager,miller-clerk,king-president

smith-clerk,ford-analyst,adams-clerk,scott-analyst,jones-manager

allen-salesman,james-clerk,turner-salesman,blake-manager,martin-salesman,ward-salesman

(**2)

2、listagg的用法:

select deptno,listagg(ename,',') withingro(order by ename) from emp group by deptno;

此條sql的執行結果如**1.

oracle函式wm concat行轉列

資料庫中的兩張表 教師表 teacher 教師所教科目表 teacher km 現在要查詢教師資訊列表,把教師的科目資訊以語文 數學這種形式展示,也就是說需要將多條科目資訊取到名稱放到教師的一條記錄中。teacher id jsmc csny ff8080815233e5e0015233eb700c...

oracle 行轉列,多行轉列

問題描述 應公司要求,設計功能,乙個id,對應不同的值,展示的時候不同的值拼接展示,如何實現 解決思路 1 拼接字串,想到了 oracle function 這樣肯定能實現,但是比較麻煩 2 oracle 自帶的乙個函式 wm concat 函式 非常給力 上 測試表1 create table c...

oracle 行轉列 使用pivot函式

由上面的表轉變為下面的表 首先建乙個原始表,並插入測試資料,如下 create table sale2 月份 varchar2 20 銷售量 varchar2 20 insert into sale select 一月份 月份,1 銷售量 from dual union select 二月份 月份,...