使用SQL垂直取消展平表

时间:2012-03-15 15:19:09

标签: sql oracle

我的主题可能不是最好的,但这就是我想要做的事情:

我有一张包含开始和结束时间的表格:

Event   Start     End
-------------------------    
event1  2:30 PM   3:00 PM
event2  3:05 PM   3:30 PM
event3  2:45 PM   3:10 PM

我想编写一个SQL命令(在Oracle中),这将导致:

Event   Type    Time
-------------------------    
event1  START   2:30 PM
event3  START   2:45 PM
event1  END     3:00 PM
event2  START   3:05 PM
event3  END     3:10 PM
event2  END     3:30 PM

基本上,我需要订购时间并知道它的事件,以及它是开始还是结束时间。我有一种感觉,这可以通过一些奇特的SQL来完成,但我很难想到如何做到这一点。

谢谢!

1 个答案:

答案 0 :(得分:7)

没什么特别的,但简单的UNION就足够了

SELECT Event, 'START', Start AS Time
FROM   ATable
UNION ALL
SELECT Event, 'END', End AS Time
FROM   ATable
ORDER BY
       Time

如果您想更加喜欢,UNPIVOT是另一种选择

SELECT  Event, Type, Time
FROM    ATable
UNPIVOT (Time FOR Type IN (Start, [End])) AS unpvt
ORDER BY  
        Time