Generează un sumar cu ROLLUP
Operatorul ROLLUP funcționează cel mai bine atunci când atributele non-măsură sunt ierarhice. Altfel, poți ajunge la niveluri de agregare ciudate, care nu au sens intuitiv.
În acest scenariu, vrem să agregăm numărul total de incidente de securitate din tabelul IncidentRollup. Managementul dorește să vadă datele agregate după combinația dintre an calendaristic, trimestru calendaristic și lună calendaristică. În plus, ar dori și linii de agregare separate pentru an calendaristic plus trimestru calendaristic, precum și linii separate pentru fiecare an calendaristic. În final, ar dori o linie suplimentară pentru totalul general. Putem face toate acestea într-o singură operațiune.
Acest exercițiu face parte din cursul
Analiza seriilor de timp în SQL Server
Instrucțiuni pentru exercițiu
- Completează definiția pentru
NumberOfIncidentsadunând numărul de incidente din fiecare interval. - Completează segmentul
GROUP BY, incluzând operatorulWITH ROLLUP.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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;