1. 程式人生 > >Oracle把一列的值合併為一個值並用逗號分隔

Oracle把一列的值合併為一個值並用逗號分隔

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