sql - 使用 SQL 垂直展开表

标签 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 来完成,但我在思考如何做到这一点时遇到了麻烦。

谢谢!

最佳答案

只要一个简单的 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

关于sql - 使用 SQL 垂直展开表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9722750/

相关文章:

sql - 在oracle中生成一个字母序列

java - 所有值均未插入数据库

sql - 选择...其中值类似于 '%...%'

sql - 从表中检索数据,其中一个表中有多个列指向另一个表中的相同主键?

java - oracle中获取元数据函数

oracle - 在 Oracle Forms 中主从关系中的详细信息 block 上禁用查询检索 (ctrl+f11)

linux - ssh -X oracle 无法正常工作

sql - Vertica 与 PostgreSQL 不同的计算

mysql - 产品数据库 - 具有多个 JOIN 的 MySQL 查询

c# - LinQ Sum Distinct Values Quantity 和 Total