MS SQL ile çapraz sorgu pivot tablo
Satır, sütün ve değerlerden oluşan 3 boyutlu veri analizi için çapraz sorgu yapmak verileri en iyi özetleme yöntemidir. Aşağıdaki data setimizde şehirlerin aylara göre dağıtıp tutar alanların toplanması sağlanmıştır.
Pivot table sorgulama yapısı SQL 2005 ve sonrası versiyonlarda çalışmaktadır.
Ayrıca MS SQL Server compatibility düzeyi SQL Server 2005 için 80, SQL Server 2008 için 100, SQL Server 2012 için 110, SQL Server 2014 için 120 olmalıdır.
Geçici tablo oluşturma
SELECT 'ANKARA' AS SEHIR,'2015-02-10' AS TARIH,10 TUTAR
INTO #TABLO
UNION
SELECT 'İZMİR' AS SEHIR,'2015-04-18' AS TARIH,20 TUTAR
UNION
SELECT 'ANKARA' AS SEHIR,'2015-01-22' AS TARIH,40 TUTAR
UNION
SELECT 'İSTANBUL' AS SEHIR,'2015-03-15' AS TARIH,30 TUTAR
UNION
SELECT 'İZMİR' AS SEHIR,'2015-07-11' AS TARIH,50 TUTAR
UNION
SELECT 'ANKARA' AS SEHIR,'2015-06-28' AS TARIH,20 TUTAR
UNION
SELECT 'ANKARA' AS SEHIR,'2015-04-04' AS TARIH,10 TUTAR
UNION
SELECT 'İZMİR' AS SEHIR,'2015-03-17' AS TARIH,50 TUTAR
UNION
SELECT 'İSTANBUL' AS SEHIR,'2015-05-09' AS TARIH,40 TUTAR
UNION
SELECT 'İSTANBUL' AS SEHIR,'2015-01-30' AS TARIH,70 TUTAR
UNION
SELECT 'ANKARA' AS SEHIR,'2015-01-24' AS TARIH,70 TUTAR
UNION
SELECT 'İZMİR' AS SEHIR,'2015-06-09' AS TARIH,70 TUTAR
UNION
SELECT 'ANKARA' AS SEHIR,'2015-02-14' AS TARIH,70 TUTAR
UNION
SELECT 'İSTANBUL' AS SEHIR,'2015-03-05' AS TARIH,70 TUTAR
Oluşturulan tablo aşağıdaki gibidir.
SELECT * FROM #TABLO
SEHIR | TARIH | TUTAR |
ANKARA | 22.01.2015 | 40 |
ANKARA | 24.01.2015 | 70 |
ANKARA | 10.02.2015 | 10 |
ANKARA | 14.02.2015 | 70 |
ANKARA | 04.04.2015 | 10 |
ANKARA | 28.06.2015 | 20 |
İSTANBUL | 30.01.2015 | 70 |
İSTANBUL | 05.03.2015 | 70 |
İSTANBUL | 15.03.2015 | 30 |
İSTANBUL | 09.05.2015 | 40 |
İZMİR | 17.03.2015 | 50 |
İZMİR | 18.04.2015 | 20 |
İZMİR | 09.06.2015 | 70 |
İZMİR | 11.07.2015 | 50 |
Şehirlerin aylara göre dağılımını yapan çapraz sorgu
SELECT SEHIR,ISNULL([1],0) AS Ocak,ISNULL([2],0) AS Subat,ISNULL([3],0) AS Mart,ISNULL([4],0) AS Nisan,
ISNULL([5],0) AS Mayis,ISNULL([6],0) AS Haziran,ISNULL([7],0) AS Temmuz,ISNULL([8],0) AS Agustos,
ISNULL([9],0) AS Eylul,ISNULL([10],0) AS Ekim,ISNULL([11],0) AS Kasim,ISNULL([12],0) AS Aralik
FROM
(SELECT SEHIR,MONTH(TARIH) AS AY,SUM(TUTAR) AS TUTAR FROM #TABLO GROUP BY SEHIR,MONTH(TARIH)) AS DATA
PIVOT (SUM(TUTAR) FOR AY IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])) AS PIVOTTABLE
ORDER BY SEHIR
Çapraz sorgu Sonucu
SEHIR | Ocak | Subat | Mart | Nisan | Mayis | Haziran | Temmuz | Agustos | Eylul | Ekim | Kasim | Aralik |
ANKARA | 110 | 80 | 0 | 10 | 0 | 20 | 0 | 0 | 0 | 0 | 0 | 0 |
İSTANBUL | 70 | 0 | 100 | 0 | 40 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
İZMİR | 0 | 0 | 50 | 20 | 0 | 70 | 50 | 0 | 0 | 0 | 0 | 0 |