CommencerCommencez gratuitement

Générer des groupements personnalisés avec GROUPING SETS

L’opérateur GROUPING SETS permet de définir précisément les niveaux d’agrégation dont nous avons besoin.

Dans ce scénario, la direction souhaite un résultat proche d’un ROLLUP, mais avec moins de détails. Plutôt que d’afficher tous les niveaux de la hiérarchie, elle veut voir trois niveaux : les totaux globaux ; par année ; et par année, trimestre et mois.

Cet exercice fait partie du cours

<cours>Analyse de séries temporelles dans SQL Server</cours>
Voir le cours

Instructions de l’exercice

  • Complétez la clause GROUP BY en utilisant GROUPING SETS. Nous voulons afficher :
  • Une ligne pour chaque combinaison année, trimestre et mois (dans cet ordre hiérarchique)
  • Une ligne pour chaque année
  • Une ligne avec les totaux globaux (c’est-à-dire un groupe vide)

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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;
Modifier et exécuter le code