MS SQL ile çapraz sorgu pivot tablo

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


İlgili Yazılar