一、行轉列listagg函數:
場景:這里的表數據使用的是oracle默認的scott賬戶下的emp(員工)表。
規范寫法 : LISTAGG(字段, 連接符) WITHIN GROUP (ORDER BY 字段)
通常情況下,LISTAGG是滿足需要的,LISTAGG 返回的是一個varchar2類型的數據,最大字節長度為4000。
所以,在實際開發中,我們可能會遇到一個問題,連接長度過長。在這個時候,我們需要將LISTAGG函數改成XMLAGG函數。XMLAGG返回的類型為CLOB,最大字節長度為32767。LISTAGG例子:
1、使用條件查詢部門號為20號的員工:
-- 查詢部門為20的員工列表
SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20' ;

2、使用listagg() WITH GROUP()將多行合並成一行(比較常用)
復制代碼
SELECT
T.DEPTNO,
listagg (T.ENAME, ',') WITHIN GROUP (ORDER BY T.ENAME) names
FROM
SCOTT.EMP T
WHERE
T.DEPTNO = '20'
GROUP BY
T.DEPTNO

3、使用listagg() width group() over將多行記錄在一行顯示(不常用)
SELECT
T .DEPTNO,
listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) over(PARTITION BY T .DEPTNO)
FROM
SCOTT.EMP T
WHERE
T .DEPTNO = '20'

二、XMLAGG函數的例子:
XMLAGG(XMLPARSE(CONTENT BSO.ID || ',' WELLFORMED) ORDER BY BSO.ID).GETCLOBVAL()
規划寫法: XMLAGG(XMLPARSE(CONTENT 字段 || 字符串 WELLFORMED) ORDER BY 字段).GETCLOBVAL()
三、對於mysql相同的效果實現,可以使用group_concat() 函數,詳情可參考:
mysql相同效果的實現 https://blog.csdn.net/sinat_36257389/article/details/95052001
PostgreSQL 相同效果的實現 https://blog.csdn.net/sinat_36257389/article/details/95611686
