我的数据如下:
| DateTime | Category | Total |
|------------------|----------|-------|
| 3/23/18 9:00 AM | Bork | 1 |
| 3/23/18 9:15 AM | Arf | 2 |
| 3/23/18 9:30 AM | Bork | 1 |
| 3/23/18 9:45 AM | Arf | 2 |
| 3/23/18 10:00 AM | Bork | 1 |
| 3/23/18 10:15 AM | Arf | 2 |
| 3/23/18 10:30 AM | Bork | 1 |
| 3/23/18 10:45 AM | Arf | 2 |
| 3/23/18 11:00 AM | Bork | 1 |
| 3/23/18 11:15 AM | Arf | 2 |
| 3/23/18 11:30 AM | Bork | 1 |
| 3/23/18 11:45 AM | Arf | 2 |
| 3/23/18 12:00 PM | Bork | 1 |
| 3/23/18 12:15 PM | Arf | 2 |
| 3/23/18 12:30 PM | Bork | 1 |
| 3/23/18 12:45 PM | Arf | 2 |
我希望按小时计算,并将类别分开,如下所示:
| Hour | Borks | Arfs |
|------|-------|------|
| 9 | 2 | 4 |
| 10 | 2 | 4 |
| 11 | 2 | 4 |
| 12 | 2 | 4 |
我知道如何按小时汇总数据......我使用这样的查询:
SELECT DatePart("h", DateTime), SUM(Total)
FROM Events
GROUP BY DatePart("h", DateTime), DateAdd("d", 0, DateDiff("d", 0, DateTime))
但是如何将类别汇总到单独的列中,以及如何命名输出中的列呢?
此外,即使源中没有数据,如何确保结果中的所有小时数都已显示?例如,它将列出小时,总数= 0.
答案 0 :(得分:2)
在类别上使用透视:
SELECT
DatePart(hour, DateTime),
SUM(CASE WHEN Category = 'Bork' THEN Total ELSE 0 END) AS Borks,
SUM(CASE WHEN Category = 'Arf' THEN Total ELSE 0 END) AS Arfs
FROM Events
GROUP BY DatePart(hour, DateTime)
ORDER BY MIN(DateTime);
另请注意,您当前的GROUP BY
可能不是您想要的。如果要报告小时组,请仅按小时分组。