【发布时间】:2018-09-09 19:31:28
【问题描述】:
我有一个查询返回给我的数据,其中频道名称存在于另一个表中,所以我只返回一组特定的频道。
SELECT DISTINCT
ReadingDate, SerialNumber, ChannelName, ChannelValue
FROM
[Staging].[UriData]
WHERE
ChannelName IN (SELECT ChannelName FROM [dbo].[Channels])
ORDER BY
ReadingDate DESC, ChannelName
此查询的重要性在于它只带回存储移动数据而不是固定诊断数据的通道。
结果(sn-p):
ReadingDate | SerialNumber | ChannelName | ChannelValue
2018-09-09 20:30:00 2209 m1 461
2018-09-09 20:30:00 2209 m2 0
2018-09-09 20:30:00 2209 m3 50
2018-09-09 20:30:00 2209 m4 15631
2018-09-09 20:30:00 2209 m5 1
2018-09-09 20:30:00 2209 m6 8150
2018-09-09 20:30:00 2209 m7 0
2018-09-09 20:30:00 2209 m8 2790
2018-09-09 20:30:00 2209 m9 0
2018-09-09 20:15:00 2209 m1 2452
2018-09-09 20:15:00 2209 m2 0
2018-09-09 20:15:00 2209 m3 50
2018-09-09 20:15:00 2209 m4 15629
2018-09-09 20:15:00 2209 m5 1
2018-09-09 20:15:00 2209 m6 8100
2018-09-09 20:15:00 2209 m7 0
2018-09-09 20:15:00 2209 m8 2780
然后我想将这些数据转换为列,以便它们按天(日期)分组,然后从该日期开始计算时间。
需要的输出:
DATE | SERIAL | ChannelName | 00:15 | 00:30 | ..... | 23:45
2018-09-06 2209 m1 Value Value ..... Value
2018-09-06 2209 m2 Value Value ..... Value
我一直在玩枢轴,但我没有得到我所描述的格式的数据。
【问题讨论】:
-
可以向我们展示表格中的样本数据而不是查询结果。
-
为什么要创建多个
Time列有什么逻辑吗? -
D-Shih,我可以在任何地方发布完整的数据集,因为它目前有 1780 行。我想这就是你的意思。
-
关于时间,日期格式为'2018-09-09 20:00:00'。每个 ChannelName 每天将有 96 个读数。所以我需要在第一个时间列中的 00:15 获得第一个读数,然后在同一天的午夜获得最后一个读数,所有其他时间都介于两者之间,例如00:15、00:30、00:45 等
-
如果您知道每天有 96 个“读数”,串行和频道,从 00:00 开始到 23:45 结束,您出于什么原因将这些信息存储在数据库表中?
标签: sql sql-server pivot