НачатьНачать бесплатно

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