Oracle 11g - Unpivot

Posted

技术标签:

【中文标题】Oracle 11g - Unpivot【英文标题】: 【发布时间】:2014-08-01 09:26:06 【问题描述】:

我有一张这样的桌子

Date        Year    Month   Day     Turn_1  Turn_2  Turn_3
28/08/2014  2014    08      28      Foo     Bar     Xab

我想把它“旋转”成这样:

Date        Year    Month   Day     Turn    Source
28/08/2014  2014    08      28      Foo     Turn_1
28/08/2014  2014    08      28      Bar     Turn_2
28/08/2014  2014    08      28      Xab     Turn_3  

我需要“来源”列,因为我需要将此结果连接到另一个表中:

Source  Interval
Turn_1  08 - 18
Turn_2  11 - 20
Turn_3  18 - 24

现在我已经使用 unpivot 来旋转表格,但我不知道如何显示“源”列(如果可能的话):

select dt_date, df_year, df_month, df_turn
  from my_rotatation_table 
       unpivot( df_turn
                 for x in(turn_1, 
                          turn_2, 
                          turn_3
              ))

已解决:

select dt_date, df_year, df_month, df_turn, df_source
  from my_rotatation_table 
       unpivot( df_turn
                 for df_source in(turn_1 as 'Turn_1', 
                          turn_2 as 'Turn_2', 
                          turn_3 as 'Turn_3'
              ))

【问题讨论】:

好像是橡皮鸭;) (c2.com/cgi/wiki?RubberDucking) 【参考方案1】:

使用这个查询:

with t (Dat, Year, Month, Day, Turn_1, Turn_2, Turn_3) as (
  select sysdate, 2014, 08, 28, 'Foo', 'Bar', 'Xab' from dual
)
select dat, year, month, day, turn, source from t
unpivot (
  source  for turn in (Turn_1, Turn_2, Turn_3)
)

DAT         YEAR    MONTH   DAY TURN    SOURCE
----------------------------------------------
08/01/2014  2014    8       28  TURN_1  Foo
08/01/2014  2014    8       28  TURN_2  Bar
08/01/2014  2014    8       28  TURN_3  Xab

【讨论】:

以上是关于Oracle 11g - Unpivot的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 11g单实例RMAN恢复到Oracle 11g RAC

完全卸载oracle11g

Oracle 10g,和 Oracle 11g 能互相兼容吗?还是向下兼容?

oracle 11g怎样配置才能连接远程数据库

如何完全卸载Oracle 11g数据库

oracle 11g ocp 笔记-- oracle 11g体系结构概述