SQL/TSQL - ROLLUP ile CUBE Kullanımı

SQL'de gruplanmış verilerde özet bilgi veren iki adet komutumuz vardır. En fazla kullanıldığı yerlerde ürünlerin kategorilere göre, yıllara göre toplamların raporlanmasıdır.

ROLLUP ve CUBE komutları özet gösteren sorgular olmasına rağmen teknik bakımından farklılıkları vardır.

Örnek olarak Ürünlerimiz kategorilerine göre gruplansın ve toplam fiyatlarını listelesin. Bu işi GROUP BY ile kategorilerine göre gruplama yapabiliyoruz.

SELECT  KategoriID, sum(UrunFiyati) Total FROM  tbl_Urun  GROUP BY  KategoriID 

Sorgumuzun Sonucu

KategoriID Total      
3                 2200,00
4                 1785,00
5                 30,00
6                 1450,00
7                 5,00
9                 455,00
10                 30,00

Fakat TSQL ile raporlama yapabilmek amacıyla ara toplam ve en sonunda genel toplamı gösterecek sorgu yazma gereksinimimiz var. Bu yüzden ROLLUP komutunu kullandığımız sorguyu yazıyoruz.

SELECT  UrunAdi, KategoriID, sum(UrunFiyati) Total FROM  tbl_Urun  GROUP BY ROLLUP (KategoriID,UrunAdi)  

Sorgumuzun Sonucu

UrunAdi                                 KategoriID Total      
Arçelik Çamaşır Makinesi 3                 2200,00
NULL                                 3                 2200,00
Toshiba Laptop                 4                 1785,00
NULL                                 4                 1785,00
PowerBank                         5                 30,00
NULL                                 5                 30,00
Beşiktaş 2017-2018 Forma 6                 200,00
Smokin                                 6                 1250,00
NULL                                 6                 1450,00
Cif Beyaz                         7                 5,00
NULL                                 7                 5,00
Kırılmaz Bardak                 9                 450,00
Tabak                                 9                 5,00
NULL                                 9                 455,00
Rimel                                 10                 30,00
NULL                                 10                 30,00
NULL                                 NULL         5955,00

Genel toplamımız 5955 TL ve kategorilere göre ara toplamlarımızı döndüren özet sorgumuz oluştu. UrunAdi kısmı boş olan alanlarda ara toplam sonucu görünmektedir. Örneğin KategoriID'si 6 olan 2 adet ürünümüz var ve fiyatları toplamı 1450 TL'dir.

ROLLUP hiyerarşi mantığı ile sorguları çalıştırır. En tepede KategoriID, altında ise KategoriID'sine göre UrunAdi listelenir. UrunAdi kısmı NULL olduğu alanda ara toplam dönmüştür. Genel Toplam sadece Total alanı dolu olan kısımdır ve KategoriID'ye ait fiyatlar bu sonucu oluşturur.

CUBE komutu ise kombinasyon mantığı ile çalışır. GROUP BY'da yazdığımız kolon adları ile kombinasyonlar oluşturur ve gruplamaları da teker teker yapar.

SELECT  UrunAdi, KategoriID , sum(UrunFiyati) Total FROM  tbl_Urun  GROUP BY CUBE (KategoriID,UrunAdi)  

Sorgumuzun Sonucu

UrunAdi                                 KategoriID Total      
Arçelik Çamaşır Makinesi 3                 2200,00
NULL                                 3                 2200,00
Toshiba Laptop                 4                 1785,00
NULL                                 4                 1785,00
PowerBank                          5                 30,00
NULL                                 5                 30,00
Beşiktaş 2017-2018 Forma 6                 200,00
Smokin                                 6                 1250,00
NULL                                 6                 1450,00
Cif Beyaz                         7                 5,00
NULL                                 7                 5,00
Kırılmaz Bardak                 9                 450,00
Tabak                                 9                 5,00
NULL                                 9                 455,00
Rimel                                 10                 30,00
NULL                                 10                 30,00          
NULL                                 NULL         5955,00      
NULL                                 3                 2200,00
NULL                                 4                 1785,00     
NULL                                 5                 30,00
NULL                                 6                 1450,00
NULL                                 7                 5,00
NULL                                 9                 455,00
NULL                                 10                 30,00          

Önce ROLLUP'ta olduğu gibi UrunAdı'na ait fiyatları tek tek toplayarak ara toplam bulmuş. Sonra Genel Toplam'ı vermiş sonra da KategoriID'lere göre Toplam Fiyatları listelemiş. ROLLUP'a göre detaylı olarak listeleme yapmıştır.



Yorumlar