oracle 行轉列



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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章