Generează grupări personalizate cu GROUPING SETS
Operatorul GROUPING SETS îți permite să definești exact nivelurile de agregare dorite.
În acest scenariu, managementul dorește ceva asemănător cu un ROLLUP, dar fără toate nivelurile de detaliu. În loc să afișeze fiecare nivel din ierarhie, managementul vrea să vadă trei niveluri: totaluri generale; pe an; și pe an, trimestru și lună.
Acest exercițiu face parte din cursul
Analiza seriilor de timp în SQL Server
Instrucțiuni pentru exercițiu
- Completează segmentul
GROUP BYfolosindGROUPING SETS. Vrem să vedem: - Un rând pentru fiecare combinație de an, trimestru și lună (în această ordine ierarhică)
- Un rând pentru fiecare an
- Un rând cu totalurile generale (adică un grup gol)
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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;