我有一个Oracle表,其中填充了与日期时间相关的数据行 .
EX:
Value Datetime
----- ----------------
123 12/08/2018 00:00
456 12/08/2018 01:00
789 12/08/2018 02:00
... ...
312 12/08/2018 23:00
321 12/09/2018 00:00
... ...
我需要获取这些数据并按天分组,但不知何故将每小时数据转换为24小时内每小时一列的列 .
EX:
Date Value(00:00) Value(01:00) Value(02:00) ... Value(23:00)
---- ------------ ------------ ------------ --- ------------
12/08/2018 123 456 789 ... 312
12/09/2018 321 654 987 ... 423
... ... ... ... ... ...
查询以这种格式从表中获取数据的最有效方法是什么?如果这个问题已经得到解答,我道歉 . 我在线搜索了一下,但老实说,即使知道正确的关键字来搜索这个答案,我也有点不一致 . 先感谢您 .
2 回答
我试图尽可能简化堆栈溢出的答案 . 我能够使用类似于下面的查询来获取格式化的信息 .
获取行并将其转换为列的过程称为旋转 . 从11g(?)开始,Oracle有
PIVOT
关键字本地执行此操作 . 请注意,Oracle中没有"time"数据类型,因此我在转动之前将它们转换为两位数字符 . 数据透视中必须有一个聚合函数,因此请确保您没有具有相同日期的重复行 .Edit:
要按天聚合,忽略时间组件,请在内联视图中添加
TRUNCed
列 .SQL Fiddle 2