日期:2014-05-17  浏览次数:20887 次

属性相同的列转为多行
存在以下表
id   year  month1  month2   month3
01   2013   23      24       25
02   2013   22      23       24

转为以下表
id   year  month
01   2013   23
01   2013   24
01   2013   25
02   2013   22
02   2013   23
02   2013   24

求方法
列转为多行

------解决方案--------------------
SELECT ID, YEAR, MONTH1 AS MONTH FROM (
SELECT * FROM 表 UNPIVOT(
MONTH1 FOR MON IN (MONTH1, MONTH2, MONTH3)
)
)

顺便说一句,不建议使用oracle的关键字/保留字做字段名、对象名.
------解决方案--------------------
引用:
在Oracle 11g中,Oracle 又增加了2个查询:pivot 和 unpivot。

pivot:行转列

unpivot:列转行

1楼让我知道了11G 的两个新函数,多谢!
我用的9I


行转列  使用 case when +聚合
列转行  使用 递归 level 或者connect by prior 构造伪列