eygle.com   eygle.com
eygle.com  
 

« 学习-SQL查询连续号码段的巧妙解法 | Blog首页 | 生日快乐 有生的日子里天天快乐 »

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

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

其实使用分析函数进行处理是很好的方式,翻一下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-

历史上的今天...
      >> 2009-09-26文章:
      >> 2008-09-26文章:
             曲终人散意尤存 - OOW 2008 结束
      >> 2007-09-26文章:
             广州蒙难记
------
这篇 【使用分析函数进行行列转换】来自 eygle.com | CSDN网摘| del.icio.us|Google订阅 | 鲜果订阅 | 抓虾订阅

By eygle on 2006-09-26 16:50 | Comments (4) | Posted to SQL.PLSQL | Edit |Pageviews:

相关文章 随机文章
如何通过DB link进行远程过程或函数调用
SQL 共享之 ROLL_INVALID_MISMATCH 含义
CBO中 SMON 进程与 col_usage$ 的维护
10g临时表空间组导致递归SQL高度解析案例
Oracle的SQL可以有多长?
ORACLE 9iR2 软件下载地址收藏
Windows Live Messenger正式版发布
弃我去者今日之日不可留
HDS Truecopy实现原理及项目的选择
伟大的人性光辉 - 街头日记(Freedom Writers)
搜索本站:

留言 (4)

如果多了一个部门还要改程序

Posted by: foreverlee at September 27, 2006 10:14 AM

部门增加是不需要修改程序的。

Posted by: eygle at September 27, 2006 12:40 PM

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做连接,但字段太多,生成的脚本过于冗长

Posted by: taxlt at May 5, 2008 1:14 PM

不用分析函数也可以实现的,性能还不错!

Posted by: yunsn at October 23, 2008 7:18 PM

发表留言:



Remember Me?
(输入验证码后方可评论,谢谢支持)



CopyRight © 2004~2010 eygle.com, All rights reserved.