ORACLE行列转换实例

 

表TEST有两个字段
LINENO--行号
UPDATEPLAN--预计更新日

查出同一行号的最近三次预计更新日并以LINENO,UPDATEPLAN1,UPDATEPLAN2,UPDATEPLAN3的形式输出。

 

CREATE TABLE SCOTT.TEST
(
    LINENO                         CHAR(20) NOT NULL,
    UPDATEPLAN                 DATE,
    CONSTRAINT TEST_PK PRIMARY KEY (LINENO)
)


使用分析函数进行处理可以使用如下查询:
SQL> select lineno,UPDATEPLAN,row_number() over (partition by lineno order by UPDATEPLAN desc) seq
from TEST
  2  ;

LINENO                               UPDATEPLAN    SEQ
-----------------------      --------           ----------
1                                        07-11-26          1
1                                        06-11-26          2
1                                        05-11-26          3
1                                        04-11-26          4
2                                        09-12-26          1
2                                        09-10-26          2
2                                        09-09-26          3
2                                        09-02-27          4

再结合其他函数进行一下行列转换:

SQL> select lineno,
  2   max(decode(seq,1,UPDATEPLAN,null)) UPDATEPLAN1,
  3   max(decode(seq,2,UPDATEPLAN,null)) UPDATEPLAN2,
  4   max(decode(seq,3,UPDATEPLAN,null)) UPDATEPLAN3
  5  from (select lineno,UPDATEPLAN,row_number() over (partition by lineno order by UPDATEPLAN desc
) seq from TEST)
  6  where seq <=3
  7  group by lineno
  8  ;

LINENO                               UPDATEPLAN1 UPDATEPLAN2 UPDATEPLAN3
--------------------------- --------         --------         --------
1                                        07-11-26         06-11-26         05-11-26
2                                        09-12-26         09-10-26         09-09-26


posted @ 2008-03-31 15:35 酷琳 阅读(283) 评论(0)  编辑  收藏 所属分类: JAVA文章转载 网摘收藏

标题  
姓名  
主页
EMail (只有博主才能看到)
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录    新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2008-03-31 15:37 编辑过