需求:一位員工隸屬多個部門,查詢結果希望呈現 張三 | 部門1,部門2,部門3 而非多筆重複列。
Oracle 內建未文件化函數 WMSYS.WM_CONCAT 可直接將群組內字串以逗號串接。
SELECT tt.uname,
wmsys.wm_concat(tt.oname) AS departments
FROM (
SELECT u.uname, o.oname
FROM usertable u
JOIN uo t ON u.id = t.uid
JOIN orup o ON o.id = t.oid
) tt
GROUP BY tt.uname;
UNAME DEPARTMENTS
------ --------------------
張三 部門1,部門2,部門3
WM_CONCAT 屬非官方支援函數,12c 以降建議改用 LISTAGG(標準 SQL)。CLOB 處理。