1、wm_concat 返回是一個CLOB 類型,不過在經我使用,這貨在性能上有問題。
select to_char(wm_concat(t.ename)), t.deptno from scott.emp t group by t.deptno;
CLARK,MILLER,KING | 10 |
SMITH,FORD,ADAMS,SCOTT,JONES | 20 |
ALLEN,JAMES,TURNER,BLAKE,MARTIN,WARD | 30 |
2、sys_connect_by_path 加 over PARTITION BY 雖然用起來有點麻煩,但是確實很快。
select t1.deptno, substr(max(sys_connect_by_path(t1.ename, ',')), 2) enames
from (select t.deptno,
t.ename,
row_number() over(PARTITION BY t.deptno order by t.deptno) rn
from scott.emp t) t1
START WITH t1.rn = 1
CONNECT BY t1.deptno = PRIOR t1.deptno
AND t1.rn - 1 = PRIOR t1.rn
GROUP BY t1.deptno;
30 | WARD,TURNER,ALLEN,JAMES,BLAKE,MARTIN |
20 | JONES,FORD,ADAMS,SMITH,SCOTT |
10 | CLARK,KING,MILLER |