สร้างการจัดกลุ่มแบบกำหนดเองด้วย GROUPING SETS
ตัวดำเนินการ GROUPING SETS ช่วยให้กำหนดระดับการรวมข้อมูลที่ต้องการได้อย่างยืดหยุ่น
ในสถานการณ์นี้ ฝ่ายบริหารต้องการดูข้อมูลในรูปแบบที่คล้ายกับ ROLLUP แต่ไม่ละเอียดมากนัก แทนที่จะแสดงทุกระดับของการรวมข้อมูลในลำดับชั้น ฝ่ายบริหารต้องการเห็นเพียง 3 ระดับ ได้แก่ ยอดรวมทั้งหมด, รายปี, และรายปี-ไตรมาส-เดือน
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาใน SQL Server
คำแนะนำการฝึกหัด
- เติมส่วน
GROUP BYโดยใช้GROUPING SETSโดยต้องการแสดงข้อมูลดังนี้: - หนึ่งแถวสำหรับทุกการรวมกันของปี ไตรมาส และเดือน (ตามลำดับชั้นนั้น)
- หนึ่งแถวสำหรับแต่ละปี
- หนึ่งแถวสำหรับยอดรวมทั้งหมด (กล่าวคือ กลุ่มว่างเปล่า)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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;