标题: 如何使用分析函数进行行列转换
lonjew
元帅
Rank: 1



UID 73191
精华 1
积分 30615
帖子 14941
威望 3
金币 14931
热心 12
阅读权限 100
注册 2008-1-28
状态 离线
如何使用分析函数进行行列转换

如何使用分析函数进行行列转换
    经常有朋友问到行列转换的问题,留言板上也有这样的提问。

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

网友 lonjew 签名 - 网友社区 ==
顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-10-8 01:34
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP