Générer un récapitulatif avec ROLLUP
L’opérateur ROLLUP est particulièrement efficace lorsque vos attributs non mesurés sont hiérarchiques. Sinon, vous risquez d’obtenir des niveaux d’agrégation inhabituels qui ne sont pas intuitifs.
Dans ce scénario, nous voulons agréger le nombre total d’incidents de sécurité dans la table IncidentRollup. La direction souhaite voir des données agrégées par combinaison d’année civile, de trimestre civil et de mois civil. En outre, elle souhaite également voir des lignes d’agrégat distinctes pour année civile plus trimestre civil, ainsi que des lignes d’agrégat distinctes pour chaque année civile. Enfin, elle souhaite une dernière ligne pour le total général. Nous pouvons faire tout cela en une seule opération.
Cet exercice fait partie du cours
<cours>Analyse de séries temporelles dans SQL Server</cours>Instructions de l’exercice
- Complétez la définition de
NumberOfIncidentsen additionnant le nombre d’incidents sur chaque plage. - Renseignez la clause
GROUP BY, en incluant l’opérateurWITH ROLLUP.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
SELECT
c.CalendarYear,
c.CalendarQuarterName,
c.CalendarMonth,
-- Include the sum of incidents by day over each range
___(ir.___) AS NumberOfIncidents
FROM dbo.IncidentRollup ir
INNER JOIN dbo.Calendar c
ON ir.IncidentDate = c.Date
WHERE
ir.IncidentTypeID = 2
GROUP BY
-- GROUP BY needs to include all non-aggregated columns
c.___,
c.___,
c.___
-- Fill in your grouping operator
WITH ___
ORDER BY
c.CalendarYear,
c.CalendarQuarterName,
c.CalendarMonth;