SQL Server’da WITH ROLLUP ve WITH CUBE Arasındaki Fark
Herkese merhaba,
Bu yazıda SQL Server’da With Rollup ile With Cube kullanımı arasındaki farkları inceleyeceğiz.
Bu incelemeyi daha rahat anlamak adına aşağıdaki örneği inceleyelim.
--Temp Tablo oluşturulması ve içerisine veri aktarılması
SELECT *
INTO #TempTablo
FROM
(
SELECT 'Dönem1' Periyot,
'Ahmet' Ad,
97 Satislar
UNION ALL
SELECT 'Dönem1',
'Ramiz',
88
UNION ALL
SELECT 'Dönem1',
'Sinem',
76
UNION ALL
SELECT 'Dönem2',
'Ahmet',
94
UNION ALL
SELECT 'Dönem2',
'Ramiz',
82
UNION ALL
SELECT 'Dönem2',
'Sinem',
71
UNION ALL
SELECT 'Dönem3',
'Ahmet',
95
UNION ALL
SELECT 'Dönem3',
'Ramiz',
83
UNION ALL
SELECT 'Dönem3',
'Sinem',
77
UNION ALL
SELECT 'Dönem4',
'Ahmet',
91
UNION ALL
SELECT 'Dönem4',
'Ramiz',
84
UNION ALL
SELECT 'Dönem4',
'Sinem',
79
) AS Tablo;
--Tablonun Listelenemesi
SELECT * FROM #TempTablo
--Rollup kullanımı
SELECT *
FROM #TempTablo
UNION ALL
SELECT Periyot,
Ad,
SUM(Satislar) ToplamSatislar
FROM #TempTablo
GROUP BY Ad,
Periyot WITH ROLLUP
HAVING Periyot IS NULL
AND Ad IS NOT NULL;
--Rollup kullanımı 2
SELECT *
FROM #TempTablo
UNION ALL
SELECT Periyot,
Ad,
SUM(Satislar) ToplamSatislar
FROM #TempTablo
GROUP BY Periyot,
Ad WITH ROLLUP
HAVING Periyot IS NOT NULL
AND Ad IS NULL;
--Cube kullanımı
SELECT Periyot,
Ad,
SUM(Satislar) ToplamSatislar
FROM #TempTablo
GROUP BY Ad,
Periyot WITH CUBE
HAVING Periyot IS NOT NULL
OR Ad IS NOT NULL;
--Pivot şeklinde sonuçları göstermek
SELECT CASE
WHEN Periyot IS NULL THEN
'TOTAL'
ELSE
Periyot
END Periyot,
CASE
WHEN Ad IS NULL THEN
'Toplam'
ELSE
Ad
END Ad,
SUM(Satislar) ToplamSatislar
INTO #TempTablo2
FROM #TempTablo
GROUP BY Ad,
Periyot WITH CUBE;
DECLARE @kolonlar NVARCHAR(MAX);
SELECT @kolonlar = COALESCE(@kolonlar + ',[' + Periyot + ']', '[' + Periyot + ']')
FROM
(SELECT DISTINCT Periyot FROM #TempTablo2) PV
ORDER BY Periyot;
DECLARE @sorgu NVARCHAR(MAX);
SET @sorgu
= N'SELECT * FROM ( SELECT * FROM #TempTablo2 ) x PIVOT ( SUM(ToplamSatislar) FOR [Periyot] IN (' + @kolonlar
+ N') ) p;';
EXEC SP_EXECUTESQL @sorgu
Yukarıda ilk olarak bir temp tablo oluşturduk ve sonrasında içerisine veri insert ettik. Rolup kullanımında aşağıdaki sonucu görmektesiniz.
İlk Rollup kullanımında GROUP BY Ad,Periyot kısmındaki Ad kısmına göre bir gruplama ve alt gruplama yapmıştır.
İkinci Rollup kullanımında GROUP BY Periyot,Ad kısmındaki Periyot kısmına göre bir gruplama ve alt gruplama yapmıştır. Peki biz iki sonucun tek bir sonuç çıktısı olarak görünmesini istiyorsak nasıl bir çözüm yapacağız.
İşte bu noktada da Cube kullanarak yukarıdaki gibi bir çözüm sağlayabilirsiniz. Sonuçlarınızı daha da anlamlı hale getirmek için Pivot kullanımını kodlarda görmektesiniz. With Rollup ile With Cube arasındaki farkı bu şekilde anlatmaya çalıştım.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.