Son Haberler
Anasayfa / Yazılım / SQL / Türetilmiş Tabloları ve CTE Kullanarak Detay Bilgi Listeleme

Türetilmiş Tabloları ve CTE Kullanarak Detay Bilgi Listeleme

Bu yazımda bazı toplama fonksiyonu uygulanmış kolonlar ile birlikte toplama fonksiyonu uygulanmamış olan kolonların görüntülenmek istediğinde ne yapabiliriz buna değinmek istiyorum. Yapacağımız uygulama tüm sonuçları listeleme içinde büyük boyutlu bir dizi setini listeleme içinde aynıdır. Örneğin Sales.SalesOrderHeade tablosunda farklı bir kaç sütunu listelemek ile birlikte, tüm satışları baz alarak her bir satış için TotalDue alanının yüzdesini hesaplamak istiyorum. Eğer ben bu oluşturmak istediğim sorguda CustomerID alanına göre gruplama yaparsam ve diğer durumları dikkate almazsam, Sales.SalesOrderHeader tablosundan toplama fonksiyonu uygulanmamış olan kolonları dahil etmemiş olurum. Bu sorunu aşabilmek için türetilmiş tablo yada CTE kullanmam gerekir.

Öncelikle türetilmiş tablo ile bunu nasıl yaparız görelim :

SELECT Musteri.CustomerID, SalesOrderID, TotalDue, OrtalamaTotalDue,
TotalDue/ToplamTotalDue * 100 AS SatisYuzdesi FROM Sales.SalesOrderHeader 
AS SatisSiparisBaslik INNER JOIN (SELECT CustomerID, SUM(TotalDue) AS ToplamTotalDue,
AVG(TotalDue) AS OrtalamaTotalDue FROM Sales.SalesOrderHeader GROUP BY CustomerID)
AS Musteri ON SatisSiparisBaslik.CustomerID = Musteri.CustomerID
ORDER BY Musteri.CustomerID;

2013032803

CTE ile yaparsak :

WITH Musteri AS (SELECT CustomerID, SUM(TotalDue) AS ToplamTotalDue, AVG(TotalDue)
AS OrtalamaTotalDue FROM Sales.SalesOrderHeader GROUP BY CustomerID) 
SELECT Musteri.CustomerID, SalesOrderID, TotalDue, OrtalamaTotalDue,
TotalDue/ToplamTotalDue * 100 AS SatisYuzdesi FROM Sales.SalesOrderHeader
AS SatisSiparisBaslik 
INNER JOIN Musteri ON SatisSiparisBaslik.CustomerID = Musteri.CustomerID
ORDER BY Musteri.CustomerID;

2013032803

Görüleceği üzere sonuçlar aynı, sadece sorgu teknikleri farklı. Türetilmiş tablo ve CTE’de gruplama CustomerID alanına göre yapılmıştır. Dış sorgu herhangi bir gruplama içermiyor ve her kolon kullanılabiliyor. Bu iki teknikte ilişkili alt sorgu ile oluşturulan tekniklerden çok daha performanslıdır.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir