Merhaba, bu yazıda sizlere SQL ile Pivot Table Kullanımı hakkında bilgi vereceğim. En son SQL yazımızın üstünden bir hayli zaman geçti.
Pivot Table Nedir ?
Pivot komutu Oracle ve MSSQL gibi SQL tabanlı databaselerin tamamında bulunmaktadır. Pivot tabloların alt alta sıralanmış halinin yan yana kolon olarak gösterimine yarar. Yığın verilerin anlamlı hale gelmesinde yardımcı olmaktadır.
Bir sorguyu Pivot Table ile raporlamak için aşağıdaki örnek gibi olmalıdır.
1 2 3 4 5 6 7 8 9 10 | SELECT * FROM ( SELECT X, COUNT(*) Y FROM [Table1] GROUP BY X ) Table2 PIVOT ( SUM(Y) FOR X IN([VALUE1], [VALUE2], [VALUE3], [VALUE4], [VALUE5],...) ) PivotTable |
Bir örnek üzerinde göstermek gerekirse; Bulunduğumuz yıl içerisinde gruba göre ne kadar paket satışı yapmışız onu ele alalım. Bunlar için Satislar, Musteriler, Gruplar tablolarını kullanacağım.
İlk önce gruplar tablosunu GrupAdi’na göre gruplayacağım. Örneğin Ocak ayında Ev grubundan 10 adet gibi.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | SELECT g.GrupAdi AS 'Grup Adı', ISNULL(count(s.SatisID), 0) AS Adet, MONTH (Tarih) AS 'Ay' FROM Satislar AS s INNER JOIN Musteriler AS m ON m.MusteriID = s.MusteriID INNER JOIN Gruplar AS g ON g.GrupID = m.GrupID WHERE s.Tarih BETWEEN CAST( STR (YEAR(GETDATE())) + '/01/01' AS DATETIME ) AND CAST( STR (YEAR(GETDATE())) + '/12/31' AS DATETIME ) GROUP BY MONTH (s.Tarih), g.GrupAdi |
Bu tabloyu yatay bir duruma getirerek grupsal bazda aylara göre bir rapor haline getirmek istiyorsak bu durumda pivot table devreye girecektir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | SELECT * FROM ( SELECT g.GrupAdi AS 'Grup Adı', ISNULL(count(s.SatisID), 0) AS Adet, MONTH (Tarih) AS 'Ay' FROM Satislar AS s INNER JOIN Musteriler AS m ON m.MusteriID = s.MusteriID INNER JOIN Gruplar AS g ON g.GrupID = m.GrupID WHERE s.Tarih BETWEEN CAST( STR (YEAR(GETDATE())) + '/01/01' AS DATETIME ) AND CAST( STR (YEAR(GETDATE())) + '/12/31' AS DATETIME ) GROUP BY MONTH (s.Tarih), g.GrupAdi ) AS q PIVOT ( SUM(Adet) FOR [Ay] IN ( [ 1 ],[ 2 ],[ 3 ],[ 4 ],[ 5 ],[ 6 ],[ 7 ],[ 8 ],[ 9 ],[ 10 ],[ 11 ],[ 12 ] ) ) AS QUERY |
Ben biraz zor bir örnek üzerinden deneme yaptım. Çünkü basit bir şekilde göstersem daha zor bir raporlama yapmak istediğinizde takıldığınız yerler olabilirdi.
Soru ve görüşleriniz için [email protected] adresine mail atabilirsiniz.
Elinize saglik güzel bir yazi olmus.
makale çok güzel takipteyiz
Çoklu pivot kullanma imkanımız var mı.