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