我正在部分解决这个问题,但遇到了一个绊脚石,我认为可以通过枢轴来解决。
我有以下 SQL 查询,结合了两个临时表变量(可能会将它们更改为临时表,因为我认为性能可能会出现问题,因为它们会被多次命中):
SELECT MeterId, MeterDataOutput.BuildingId, MeterDataOutput.Value,
MeterDataOutput.TimeStamp, UtilityId, SnapshotId
FROM @MeterDataOutput as MeterDataOutput INNER JOIN @InsertOutput AS InsertOutput
ON MeterDataOutput.BuildingId = InsertOutput.BuildingId
AND MeterDataOutput.[Timestamp] = InsertOutput.[TimeStamp]
这将产生下表:
然后,我将查询修改为按 BuildingId、SnapshotId、Timestamp、Utility 分组,并应用 SUM() 函数来聚合 Value 字段(并删除 MeterId,因为它不需要),如下所示:
SELECT MeterDataOutput.BuildingId, SUM(MeterDataOutput.Value) AS Value, MeterDataOutput.TimeStamp, UtilityId, SnapshotId
FROM @MeterDataOutput as MeterDataOutput
INNER JOIN @InsertOutput AS InsertOutput
ON MeterDataOutput.BuildingId = InsertOutput.BuildingId
AND MeterDataOutput.[Timestamp] = InsertOutput.[TimeStamp]
GROUP BY MeterDataOutput.BuildingId, MeterDataOutput.TimeStamp, UtilityId, SnapshotId
此查询为我提供了下表:
现在我遇到的问题是将 UtilityId 值转换为列,并将值字段中的值放在每列下。IE:
作为参考 buildingId、Timestamp、Snapshot 和 Value 是可变的。UtilityId 值 6 始终为“电力”,7 始终为“燃气”,8 始终为“水”。
我实际上开始掌握 SQL 百灵鸟 :)