CTE'leri inanılmaz derecede yararlı bulduğum özyinelemenin yanı sıra karmaşık raporlama sorguları oluştururken. İhtiyacım olan verilerin parçalarını almak için bir dizi CTE kullanıyorum ve ardından son seçimde birleştiriyorum. Bunları sürdürmek daha kolay, birçok türetilmiş tablo veya 20 katılımla aynı şeyi yapmaktan daha kolay buluyorum ve bir çok ilişkiden dolayı birden fazla kaydın etkisiyle doğru verileri döndürdüğüme daha fazla güvenebileceğimi düşünüyorum. tüm farklı birleşimler. Hızlı bir örnek vereyim:
;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
Böylece, istediğiniz farklı bilgi gruplarını ayırarak, her bir bölümü ayrı ayrı kontrol edebilirsiniz (yorumlu seçimleri kullanarak, her birini ayrı ayrı yorumlayarak ve yalnızca bu seçime kadar koşarak) ve masrafta bir değişiklik yapmanız gerekiyorsa hesaplama (bu örnekte), hepsi bir araya getirildiğinde tek bir büyük sorguda karıştırılmış olduklarından daha kolaydır. Elbette bunu kullandığım gerçek raporlama sorguları genellikle örnekten çok daha karmaşık.