SQL.PLSQL
2006-09-26
使用分析函数进行行列转换
经常有朋友问到行列转换的问题,留言板上也有这样的提问。
其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询:
再结合其他函数进行一下行列转换:
-The End-
其实使用分析函数进行处理是很好的方式,翻一下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-
历史上的今天
- 2010-09-26 《DBA 手记》写作投稿建议标准
- 2009-09-26 工作日志:2亿记录的exp导出时间记录
- 2008-09-26 曲终人散意尤存 - OOW 2008 结束
- 2007-09-26 广州蒙难记
- 2007-09-26 在广州Oracle 11g发布会作主题演讲
如果多了一个部门还要改程序
部门增加是不需要修改程序的。
Oracle有相关的函数进行矩阵数据的行列转换吗?比如
lsh xh n1 n2
111 1 10 100
111 2 20 200
转换成
lsh xh n
111 1 10
111 1 20
111 2 100
111 2 200
我试过用Union all做连接,但字段太多,生成的脚本过于冗长
不用分析函数也可以实现的,性能还不错!