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.


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

İ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.

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

İ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.

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

İş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.

585 Kez Okundu