如何使用分析函数进行行列转换

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

经常有朋友问到行列转换的问题,留言板上也有这样的提问。

其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询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.

再结合其他函数进行一下行列转换:

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

这个结果基本上还是差强人意的。

-The End-

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航