Merhaba,
Bu içeriğimizde; SQL’de sorgu sonucu elde ettiğimiz tablo verilerini görsel açıdan daha anlamlı ve okunabilir bir şekilde düzenleyen harika bir fonksiyon olan Pivot Table’ın kullanımına değineceğiz.
Pivot Table, sorgu sonucu gelen tablo üzerindeki verileri belirli bir satırdaki veriler merkezinde kolonlara ayırarak yatay olarak şekillendiren ve verisel karşılık olarakta bu kolonlaştırılan satırlara denk gelen değerleri basan bir raporlama fonksiyonudur. Bu şekilde yığın verilerden anlamlı özet tablolar çıkarmamızda oldukça yardımcı olmaktadır.
Bir sorguyu Pivot Table ile raporlaştırabilmek için aşağıdaki prototipte olduğu gibi hareket edilmelidir;
SELECT * FROM ( SELECT X, COUNT(*) Y FROM [Table1] GROUP BY X ) Table2 PIVOT ( SUM(Y) FOR X IN([VALUE1], [VALUE2], [VALUE3], [VALUE4], [VALUE5],...) ) PivotTable
Dikkat ederseniz eğer subqueryden gelen verileri externalquery ile “Table2” adında elde etmekte ve “PIVOT” fonksiyonu çağrılarak “IN” parametresine girilen “X” kolonundaki değerler için oluşturulacak kolonlara özel “Y” toplamı basılacaktır. Anlayacağınız “X” kolonunun verilerine özel yatay bir tablo söz konusu olacaktır.
Konuyu örneklendirmek adına “North-Wind” veritabanı üzerindeki “Satislar” tablosunu ele alalım;
Dikkat ederseniz “Satislar” tablosunda “SevkSehri” ve “SevkUlkesi” olmak üzere iki adet kolon mevcuttur.
Şimdi…
Gün geldi, şöyle bir soru ve ihtiyaçla karşılaşıldı diyelim;
Hangi şehirde kaç adet satış yapılmıştır?
Bu soruya karşılık olarak yapabileceğimiz en mantıklı hamle aşağıda olduğu gibi şehirleri gruplayıp yapılan işlerin adedini almaktır.
İstek ve ihtiyaca dönük doğru ve gereken sonuç elde edildiği için amacımıza ermiş bulunmaktayız. Ama bu tabloyu yatay bir vaziyette ve direkt olarak şehirsel bazda kolonlardan oluşan bir rapor şeklinde elde etmek istiyorsak eğer işte burada devreye Pivot Table girecektir.
Görüldüğü üzere anlaşılabilir, okunabilir ve harika bir rapor elde etmiş bulunmaktayız(Bu örnekte tüm şehirler kolon olarak belirtilmemiştir).
Makalemizin içeriğini zenginleştirmek ve ilgili konuya daha çok pratiksel açı kazandırmak maksadıyla bir örnek üzerinde daha inceleme yapmayı tercih ediyorum.
Yukarıdaki ekran görüntüsüne göz atarsanız eğer hangi personelin hangi ülkeye kaç satış yaptığını yatay boyutta sonuç veren sorgu yazılmış bulunmaktadır.
Subquery de yapılan inner join işlemi neticesinde elde edilen personel bilgileri, ülke bilgisine özel kolonlara karşılık toplam yapılan satış bilgisini basacak Pivot işlemi esnasında sıkıntısız bir şekilde sonuç tablosuna eklenmiştir.
Bu harika SQL fonksiyonu hakkında bilmenize değer son husus ise büyük boyutlu verilerde performans açısından oldukça maliyetli olmasıdır. Eğer ki performans söz konusu olan ama bir yandan da milyonlarca veri üzerinde işlem yapmanızı gerektiren raporsal çalışmalarınızda bu maliyeti göz önünde tutarak hareket etmenizi tavsiye ederim.
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
