oracle 行列倒置,使用分析函数进行行列转换

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

6ee5639a40442445944d63b514b2dd02.png

提问。

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

By eygle on 2006-09-26 16:50 |

Comments (4) |

SQL.PLSQL | 917 |

4 Comments

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值