通用的行列转换的方法

  在工作中经常需要用到行列转换进行聚合统计之类的事儿,现在就说一个最简单最通用的方法,适应sum ()/max ()/min()等函数结合解码来实现行列转换,拿甲骨文中典型的scott.emp表为例,,
  
        

  点击()折叠或打开   

        
      <李>   SCOTTEMP
         李   <李>   EMPNO ENAME工作经理HIREDATE SAL通讯DEPTNO
      李   <李>   
      李   <李>   ,7369年史密斯职员7902 19801217 80000 20
      李   <李>   7499年,艾伦推销员7698 30000 160000 1981220 30
      李   <李>   ,7521病房推销员7698 1981222 125000 50000 30
      李   <李>   7566年,琼斯经理7839 198142 297500 20
      李   <李>   7654年,马丁推销员7698 140000 125000 1981928 30
      李   <李>   7698年,布雷克经理7839 198151 285000 30
      李   <李>   7782年,克拉克经理7839 198169 245000 10
      李   <李>   ,7788分析师斯科特7566 1987419 300000 20
      李   <李>   7839年,王主席19811117 500000 10
      李   <李>   特纳,7844年销售7698 198198 150000 000 30
      李   <李>   ,7876亚当斯职员7788 1987523 110000 20
      李   <李>   7900年,JAMES CLERK 7698 1981123 95000 30
      李   <李>   7902年,福特分析师7566 1981123 300000 20
      李   <李>   7934年,米勒职员7782 1982123 130000 10
      李   <李>   14个选择   李   
        现在如果想要按照部门统计一下,各个经理下的员工的平均薪水(或者最高薪水,最低,合计薪水),这样就使用到了行列转换,可做如下操作来实现:,
  
        

  点击()折叠或打开   

        
      <李>   deptno
         李   <李>   2下才能sal0琼斯
      李   <李>   3下才能sal0布莱克
      李   <李>   4下才能sal0克拉克
      李   <李>   5下才能sal0斯科特
      李   <李>   6下才能sal0王
      李   <李>   7下才能sal0福特
      李   <李>   8才能scottemp
      李   <李>   9才能deptno
      李   <李>   ,10
      李   <李>   琼斯DEPTNO布雷克克拉克斯科特王福特
      李   <李>   
      李   <李>   ,,,30 0 0 0 475 109166666 0
      李   <李>   ,,,1200 0 0 220 595 160
      李   <李>   ,,,10 0 0 433333333 0 433333333 0   李   
        
  可以看到很容易的实现了数据的统计只
  当然行列的转换的方法还有其他几种,如使用例时,或者使用wmsys。wm_concat函数都都可以实现。不过上面的方法算是最容易理解了的吧。
  
  
  

通用的行列转换的方法