Sql Server’da Pivot Table Kullanımı, Pivot Table Nedir ?
Sqlde normal select sorgularını çektiğimiz vakit dönen sonuçlarda hem görsel görünüm hem de daha düzgün ve gruplu bir çıktı almak istediğimizde Sqlde Pivot Table kullanmamız gerekir. Peki bu sonuçlar neye benzer bazı durumlarda sqlden dönen sonuçları alıp excelde Pivot Table yaparız ve işlemlerimize devam ederiz Ancak öyle durumlar vardır ki doğrudan raporu pivot almamız gerekir bazı özel otomasyonlar , yazılımlar veya erp programlarında sıklıkla karşılaşılan bir durumdur. Örnek vermek gerekirse satışlarınızı olduğu bir talo düşünün tabloda ürün adınız , satış miktarınız ve satış yapan kasiyer adı olmuş olsun , bunu alırken ürünler satırlarda sütunlarda ise kasiyer isimleri olsun ve buna göre satış rakamları toplam gelsin isteriz işte tam bu ve daha nice noktada Pivot Table işimizi görecektir. Bu şekilde sorgularımız daha anlamlı olacaktır.
Kullanım kalıbı aşağıdaki gibidir ;
SELECT * FROM
(
SELECT Kolon1, SUM(Kolon2) FROM [Table1]
GROUP BY Kolon1
) Table2
PIVOT
(
SUM(Kolon2) FORKolon1 IN([VALUE1], [VALUE2], [VALUE3], [VALUE4], [VALUE5],...)
) PivotTable
Kodu açıklamak gerekir ise ilk select içindeki selectte normal bir select sorgusu yer almakta ve klasik gruplama işlemi yapılmıştır. burada değerler satırlar halinde gelecektir. kolon olarak Kolon1
ve Kolon2
gelecektir.
Sorgunun devamına baktığımız zaman PIVOT fonksiyonu ile Kolon2 alanı toplanacaktır, sütunlarda ise Kolon1 alanında geçen VALUE1,VALUE2,VALUE3 alanları görünecektir.
Normal bir sorgu üzerinde görelim ;
USE AdventureWorks2014 ;
GO
SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost FROM Production.Product
GROUP BY DaysToManufacture;
Sorgunu çıktısı aşağıdaki gibidir :
Pivot fonksiyonu ilke kullanalım :
SELECT * FROM (
SELECT DaysToManufacture, StandardCost FROM Production.Product
) AS SourceTable
PIVOT ( AVG(StandardCost) FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;
Çıkan sonuç :

Daha fazla bilgi için Microsoftun sitesinde yer alan T-SQL Pivot örneklerine göz atmanızı tavsiye ederim.