एक जगह के अलावा पुनरावर्तन जहां मुझे लगता है कि CTEs अविश्वसनीय रूप से उपयोगी है, जब जटिल रिपोर्टिंग प्रश्न बनाते हैं। मुझे जिन डेटा की ज़रूरत है, उनके लिए मैं सीटीई की एक श्रृंखला का उपयोग करता हूं और फिर अंतिम चयन में संयोजन करता हूं। मुझे लगता है कि वे बहुत सारे व्युत्पन्न तालिकाओं या 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
इसलिए आप जो जानकारी चाहते हैं, उसके अलग-अलग हिस्से को अलग-अलग करके, आप प्रत्येक भाग को व्यक्तिगत रूप से देख सकते हैं (टिप्पणी का चयन करके, प्रत्येक व्यक्ति को अलग-अलग जोड़कर और केवल उस चयन के अनुसार ही चल सकते हैं) और यदि आपको खर्च में बदलाव करने की आवश्यकता है गणना (इस उदाहरण में), यह खोजना आसान है जब वे सभी एक साथ एक बड़े पैमाने पर क्वेरी में मिलाए जाते हैं। बेशक, मैं इसके लिए उपयोग किए जाने वाले वास्तविक रिपोर्टिंग प्रश्नों को आमतौर पर उदाहरण की तुलना में बहुत अधिक जटिल हूं।