SQL Server’da WITH ROLLUP ve WITH CUBE Arasındaki Fark

Herkese merhaba,

Bu başlık altında 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
)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 = 'SELECT * FROM 
             (
                 SELECT * FROM #TempTablo2
             ) x
             PIVOT 
             (
                 SUM(ToplamSatislar)
                 FOR [Periyot] IN (' + @kolonlar + ')
            ) 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.

SQL Server Eğitimleri Kanalına Abone Olun

Şunlar makaleler de hoşunuza gidebilir