Tạo bản tóm tắt với ROLLUP
Toán tử ROLLUP phát huy hiệu quả nhất khi các thuộc tính không phải chỉ số (non-measure) có cấu trúc phân cấp. Nếu không, bạn có thể nhận được các cấp độ tổng hợp lạ và thiếu trực quan.
Trong tình huống này, chúng ta muốn tổng hợp tổng số sự cố an ninh trong bảng IncidentRollup. Ban quản lý muốn xem dữ liệu được tổng hợp theo tổ hợp của năm dương lịch, quý dương lịch và tháng dương lịch. Ngoài ra, họ cũng muốn thấy các dòng tổng hợp riêng cho năm dương lịch cộng với quý dương lịch, cũng như các dòng tổng hợp riêng cho từng năm dương lịch. Cuối cùng, họ muốn có thêm một dòng cho tổng cộng chung. Tất cả những điều này có thể thực hiện trong một thao tác.
Bài tập này là một phần của khóa học
Phân tích chuỗi thời gian trong SQL Server
Hướng dẫn bài tập
- Hoàn thiện định nghĩa cho
NumberOfIncidentsbằng cách cộng số sự cố trong mỗi phạm vi. - Điền phần
GROUP BY, bao gồm cả toán tửWITH ROLLUP.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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;