Oracle把一列的值合併為一個值並用逗號分隔
阿新 • • 發佈:2019-01-01
Oracle把一列的值合併為一個值,並用逗號分隔。
例項中將把部門表(DEPT表)與員工表(EMP表)關聯,查詢每個部門下的所有員工姓名,員工姓名之間以逗號分隔(如圖一)。
圖一:執行結果
1、WMSYS.WM_CONCAT(列名)函式
介紹:其函式在Oracle 10g推出,在10g版本中,返回字串型別,在11g版本中返回clob型別。括號裡面的引數是列,而且可以是多個列的集合,也就是說在括號裡面可以自由地用‘||’合併字串。
SELECT D.DEPTNO AS 部門編號,D.DNAME AS 部門名稱,WMSYS.WM_CONCAT(E.ENAME) AS 員工列表 FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO GROUP BY D.DEPTNO,D.DNAME
拼接多列(拼接員工姓名和員工編號)
SELECT D.DEPTNO AS 部門編號,D.DNAME AS 部門名稱,WMSYS.WM_CONCAT(E.ENAME||'('||E.EMPNO||')') AS 員工列表
FROM DEPT D
LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO
GROUP BY D.DEPTNO,D.DNAME
2、LISTAGG(列名,<分隔符>) WITHIN GROUP(ORDER BY 列名)函式
介紹:其函式在Oracle 11g 版本中推出,對分組後的資料按照一定的排序進行字串連線。
SELECT D.DEPTNO AS 部門編號,D.DNAME AS 部門名稱,LISTAGG(E.ENAME,',') WITHIN GROUP(ORDER BY E.ENAME) AS 員工列表 FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO GROUP BY D.DEPTNO,D.DNAME