我的oracle生涯(5)行列转换基础
原数据:
ID C1 C2 C3 ..
1 V11 V12 V13
2 V12 V22 NULL
3 V13 NULL V33
4 NULL V24 V34
。。。。。。
方式一:UNION ALL
select id ,'C1' CN,C1 CV FROM TABLE
UNION ALL
select id ,'C2' CN,C2 CV FROM TABLE
UNION ALL
select id ,'C3' CN,C3 CV FROM TABLE
......
结果:
id CN CV
1 C1 V11
2 C1 V12
3 C1 V13
4 C1 NULL
......
方式二:MODEL
select id,cn,cv from A
MODEL // model 查询开始
RETURN UPDATED ROWS // 返回被更新了的列
PARTITION BY (id) // 查询的逻辑块(用id分区)
DIMENSION BY (0 AS n) // 一维 ( a as y,b as z 二维)
MEASURES("XX" AS CN,'YY' AS CV,C1,C2,C3) // 定义要被运算操作的列
RULES() // 定义运算规则
ORDERBY ID,CN;
结果:
ID CN CV
1 C1 V11
1 C2 V21
1 C3 V31
2 C1 ...
...
具体例子请查看
http://www.itpub.net/thread-1887787-1-1.html 的问题以及15#的回复(以前自己回复的)