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.
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.
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.
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.
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
Yorum Gönder