使用 GROUPING SETS 生成自定义分组
GROUPING SETS 运算符允许我们精确定义所需的聚合层级。
在本场景中,管理层希望看到类似于 ROLLUP 的结果,但信息不要那么多。与其展示层级中的每一个聚合层级,管理层只想看到 3 个层级:总计;按年份;以及按年份、季度、月份。
本练习是课程的一部分
SQL Server 中的时间序列分析
练习说明
- 使用
GROUPING SETS补全GROUP BY部分。我们需要看到: - 每个 年-季-月 组合各一行(按该层级顺序)
- 每个年份各一行
- 一行总计(也就是一个空分组)
交互式实操练习
通过完成这段示例代码来试试这个练习。
SELECT
c.CalendarYear,
c.CalendarQuarterName,
c.CalendarMonth,
SUM(ir.NumberOfIncidents) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
WHERE
ir.IncidentTypeID = 2
-- Fill in your grouping operator here
GROUP BY ___ ___
(
-- Group in hierarchical order: calendar year,
-- calendar quarter name, calendar month
(___, ___, ___),
-- Group by calendar year
(___),
-- This remains blank; it gives us the grand total
()
)
ORDER BY
c.CalendarYear,
c.CalendarQuarterName,
c.CalendarMonth;