使用SQL垂直取消展平表

Pau*_*aul 3 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
Run Code Online (Sandbox Code Playgroud)

我想编写一个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
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Lie*_*ers 7

没有什么花哨但简单UNION就足够了

SELECT Event, 'START', Start AS Time
FROM   ATable
UNION ALL
SELECT Event, 'END', End AS Time
FROM   ATable
ORDER BY
       Time
Run Code Online (Sandbox Code Playgroud)

如果你想得到更多的幻想,UNPIVOT是另一种选择

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