Створення власних групувань за допомогою 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;