存在以下表
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求方法列转为多行

解决方案 »

  1.   

    SELECT ID, YEAR, MONTH1 AS MONTH FROM (
    SELECT * FROM 表 UNPIVOT(
    MONTH1 FOR MON IN (MONTH1, MONTH2, MONTH3)
    )
    )
    顺便说一句,不建议使用oracle的关键字/保留字做字段名、对象名.
      

  2.   

    在Oracle 11g中,Oracle 又增加了2个查询:pivot 和 unpivot。pivot:行转列unpivot:列转行1楼让我知道了11G 的两个新函数,多谢!
    我用的9I
      

  3.   


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

  4.   

    原始的办法:
    SELECT ID, YEAR, MONTH1 AS MONTH FROM TABLE
    union all
    SELECT ID, YEAR, MONTH2 AS MONTH FROM TABLE
    union all
    ...
      

  5.   

    在Oracle 11g中,Oracle 又增加了2个查询:pivot 和 unpivot。
     
    这个没用过 
    不过3楼那个 也可以实现 不过字段多的情况下 UNION ALL  就不好用了