ที่เดียวนอกเหนือจากการเรียกซ้ำที่ฉันพบว่า CTE มีประโยชน์อย่างเหลือเชื่อคือเมื่อสร้างคิวรีการรายงานที่ซับซ้อน ฉันใช้ชุดข้อมูล CTE เพื่อรับข้อมูลที่ต้องการและรวมเข้าด้วยกันในการเลือกขั้นสุดท้าย ฉันพบว่าง่ายต่อการดูแลรักษามากกว่าการทำสิ่งเดียวกันกับตารางที่ได้รับจำนวนมากหรือ 20 การเชื่อมต่อและฉันพบว่าฉันมั่นใจมากขึ้นว่าจะส่งคืนข้อมูลที่ถูกต้องโดยไม่มีผลกระทบจากหลายระเบียนเนื่องจากความสัมพันธ์แบบหนึ่งเดียว รวมที่แตกต่างกันทั้งหมด ขอยกตัวอย่างรวดเร็ว:
;WITH Conferences (Conference_id)
AS
(select m.Conference_id
FROM mydb.dbo.Conference m
WHERE client_id = 10
and Conference_id in
(select Conference_id from mydb.dbo.Expense
where amount <>0
and amount is not null)
)
--select * from Conferences
,MealEaters(NumberMealEaters, Conference_id, AttendeeType)
AS
(Select count(*) as NumberMealEaters, m.Conference_id, AttendeeType
from mydb.dbo.attendance ma
join Conferences m on m.Conference_id = ma.Conference_id
where (ma.meals_consumed>0 or meals_consumed is null)and attended = 1
group by m.Conference_id)
--select * from MealEaters
,Expenses (Conference_id,expense_date, expenseDescription, RecordIdentifier,amount)
AS
(select Conference_id,max(expense_date) as Expense_date, expenseDescription, RecordIdentifier,sum(amount) as amount
FROM
(SELECT Conference_id,expense_date, amount, RecordIdentifier
FROM mydb.dbo.Expense
WHERE amount <> 0
and Conference_id IN
(SELECT Conference_id
FROM mydb.dbo.Conferences )
group by Conference_id, RecordIdentifier) a
)
--select * from Expenses
Select m.Conference_id,me.NumberMealEaters, me.AttendeeType, e.expense_date, e.RecordIdentifier,amount
from Conferences m
join mealeaters me on m.Conference_id = me.Conference_id
join expenses e on e.Conference_id = m.Conference_id
ดังนั้นโดยการแยกข้อมูลที่แตกต่างกันที่คุณต้องการคุณสามารถตรวจสอบแต่ละส่วนแยกกันได้ (โดยใช้การเลือกข้อคิดเห็นที่เลือกโดยไม่ใส่เครื่องหมายข้อคิดเห็นแต่ละรายการแยกต่างหากและเรียกใช้เท่าที่เลือก) และหากคุณต้องการเปลี่ยนแปลงค่าใช้จ่าย การคำนวณ (ในตัวอย่างนี้) จะง่ายต่อการค้นหามากกว่าเมื่อรวมกันเป็นแบบสอบถามขนาดใหญ่ แน่นอนว่าคิวรีการรายงานจริงที่ฉันใช้นี้มีความซับซ้อนมากกว่าตัวอย่าง