私は部分的にこれを解決しようとしていますが、ピボットで解決できると思われるつまずきブロックにぶつかりました。
2 つの一時テーブル変数を組み合わせた次の 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 の値を列に変換し、Value フィールドの値を各列の下に配置することです。すなわち:
参考までに、BuildingId、Timestamp、Snapshot、Value は可変です。UtilityId 値 6 は常に「電力」、7 は常に「ガス」、8 は常に「水」です。
私は実際にSQLヒバリの手を取り始めています:)