Generowanie podsumowania z ROLLUP
Operator ROLLUP sprawdza się najlepiej, gdy atrybuty niebędące miarami tworzą hierarchię. W przeciwnym razie możesz otrzymać poziomy agregacji, które nie mają intuicyjnego sensu.
W tym scenariuszu chcemy zsumować łączną liczbę incydentów bezpieczeństwa z tabeli IncidentRollup. Kierownictwo chciałoby zobaczyć dane zagregowane według kombinacji roku kalendarzowego, kwartału i miesiąca. Ponadto oczekuje osobnych wierszy agregujących dla kombinacji roku i kwartału, a także osobnych wierszy dla każdego roku. Na koniec potrzebny jest jeszcze jeden wiersz z sumą całkowitą. Wszystko to można wykonać w ramach jednej operacji.
To ćwiczenie jest częścią kursu
Analiza szeregów czasowych w SQL Server
Instrukcje do ćwiczenia
- Uzupełnij definicję
NumberOfIncidents, sumując liczbę incydentów w każdym przedziale. - Wypełnij segment
GROUP BY, dodając operatorWITH ROLLUP.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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;