經(jīng)常有朋友問(wèn)到行列轉(zhuǎn)換的問(wèn)題,留言板上也有這樣的提問(wèn)。
其實(shí)使用分析函數(shù)進(jìn)行處理是很好的方式,翻一下Tom的書,將其中的一個(gè)例子收錄在這里. 比如查詢scott.emp表的用戶SAL排序信息,可以使用如下查詢:
SQL> SELECT deptno, ename, 2 ROW_NUMBER () OVER (PARTITION BY deptno ORDER BY sal DESC) seq 3 FROM emp; DEPTNO ENAME SEQ---------- ---------- ---------- 10 KING 1 10 CLARK 2 10 MILLER 3 20 SCOTT 1 20 FORD 2 20 JONES 3 20 ADAMS 4 20 SMITH 5 30 BLAKE 1 30 ALLEN 2 30 TURNER 3 30 WARD 4 30 MARTIN 5 30 JAMES 6 14 rows selected. 再結(jié)合其他函數(shù)進(jìn)行一下行列轉(zhuǎn)換: SQL> select deptno,
2 max(decode(seq,1,ename,null)) highest,
3 max(decode(seq,2,ename,null)) second,
4 max(decode(seq,3,ename,null)) third
5 from (
6 select deptno,ename,
7 row_number() over
8 (partition by deptno order by sal desc) seq
9 from emp)
10 where seq <=3 group by deptno
11 /
DEPTNO HIGHEST SECOND THIRD
---------- ---------- ---------- ----------
10 KING CLARK MILLER
20 SCOTT FORD JONES
30 BLAKE ALLEN TURNER
這個(gè)結(jié)果基本上還是差強(qiáng)人意的。
-The End-