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>Instructions de l’exercice
- Complétez la clause
GROUP BYen utilisantGROUPING 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;