Создание пользовательских группировок с помощью GROUPING SETS
Оператор GROUPING SETS позволяет задавать конкретные уровни агрегации по вашему усмотрению.
В данном сценарии руководство хочет получить результат, похожий на ROLLUP, но с меньшим количеством детализации. Вместо отображения всех уровней иерархии нужны три уровня: общие итоги; по годам; по году, кварталу и месяцу.
Это упражнение является частью курса
Анализ временных рядов в SQL Server
Инструкции к упражнению
- Заполните секцию
GROUP BY, используяGROUPING SETS. Нужно получить: - Одну строку для каждой комбинации года, квартала и месяца (в указанном иерархическом порядке)
- Одну строку для каждого года
- Одну строку с общими итогами (то есть пустую группу)
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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;