SQL’de pivot nedir, pivot table kullanımı nasıl olur, bu yazımda bunları anlatmaya çalışacağım.
Şimdi pivot nedir, çok kısa açıklamak gerekirse, tabloda alt alta sıralanmış kayıtları, yan yana sütunlar halinde göstermek için pivot kullanılır.
Ya da satırları sütuna çevirme işlemi de denilebilir.
Bu kullanım çok fazla bilinen ya da tercih edilen bir yöntem değildir, çoğunlukla raporlama yaparken kullanılır. Ama kullanımını öğrendikten sonra, epeyce işinize yarayacaktır.
Lafı çok uzatmadan, bu kullanımı bir örnek üzerinden anlatalım.
Şimdi elimizde tblHarcama adında aşağıdaki bir tablomuz olsun,
SELECT * FROM tblHarcama
Burada tablodaki isimlerin 2019, 2018 ve 2017 yılında yaptıkları harcamaların tutarlarının tutulduğunu düşünelim.
Şimdi, bu isimlerin yıl yıl yaptıkları harcamaların toplamlarını tek bir kolonda görmek istersek, aşağıdaki sorgu işimizi görecektir.
SELECT * FROM ( SELECT Musteri, Yil, SUM(Tutar) as ToplamTutar FROM tblHarcama GROUP BY Musteri, Yil ) AS tablom PIVOT ( SUM(ToplamTutar) --toplam tutarı istiyoruz FOR Yil --hangi satırları sütün gibi göstereceğimizi belirtiyoruz IN ([2019], [2018], [2017]) --sütun gibi görünecek kayıtları belirliyoruz ) AS pivotTablom
Sorgu sonucu aşağıdaki gibi olacaktır.
Burada görüldüğü üzere, her bir kişinin yıl içinde yaptıkları toplam harcamaları tek seferde görebiliyoruz.
Konunun daha anlaşılır olması açısından tabloyu kendiniz de oluşturup, sorguyu çalıştırarak deneme yapabilirsiniz.
Buna ek olarak bir de Pivot’un tersi olan Unpivot kullanımı vardır, bunu da daha sonra anlatacağım, dilerseniz kendiniz de araştırıp ne olduğu hakkında fikir sahibi olabilirsiniz.
Konuyu oldukça basit tutmaya çalıştım. Umarım faydalı olmuştur.
Merhabalar, paylaşımınız için teşekkür ederim.
Ben IBM SPSS kullanıyorum ve yetkilendirildiğim tablolar var. Sorum için sizin örneğinizi kullanacağım. Verileri çekerken SPSS programında “Sources” kısmından “Database” nodunu seçiyorum, burada SQL Query sekmesine aşağıdakini yazıyorum ve verilerimi çekiyorum. Sonra da “Export” nodlarıyla çıktıyı (mesela excel formatında) dışarı alıyorum. Tabi sorgularım çok daha fazla veri de içerebiliyor.
Bu sorgunun arasına pivot’u nasıl yerleştirebilirim acaba?
SELECT
Id,
Musteri,
Tutar,
Yil
FROM
tblHarcama (yetkili olduğum tablo adı)
WHERE
Yil >= 2017
AND
Musteri IN ( ‘Ayşe’, ‘Fatma’, ‘Mehmet’, ‘Mustafa’ )
Merhaba,
Satır ve kolon dip toplamlarını nasıl aldırabilirim?
Şu an için kolon dip toplamlarını buldum, eğer yapabilirsem hem satır hem de kolon dip toplamları bulmayı da yorum olarak eklerim. Mevcut kodun eklenmiş hali aşağıdadır.
WITH data AS (
SELECT * FROM (
SELECT Musteri, Yil, SUM(Tutar) as ToplamTutar FROM tblHarcama
GROUP BY Musteri, Yil
) AS tablom
PIVOT
(
SUM(ToplamTutar) –toplam tutarı istiyoruz
FOR Yil –hangi satırları sütün gibi göstereceğimizi belirtiyoruz
IN ([2019], [2018], [2017]) –sütun gibi görünecek kayıtları belirliyoruz
)
AS pivotTablom
)
SELECT Musteri, [2019], [2018], [2017] FROM data
UNION ALL
SELECT ”, SUM([2019]), SUM([2018]), SUM([2017]) FROM data