SQL PIVOT KULLANIMI

Geçen hafta bir sıkıntıyla karşılaştım ve sorunun çözümü pivot kullanımı oldu. Size bu yazımda, neden pivot kullanma ihtiyacı duydum? Nasıl çözdüm?  Sorularına cevap vereceğim. İhtiyaç duymadan oturup hadi bugün sql de pivot yapayım diyeceğiniz bir konu değil. Pivot kullanıyorsanız tablo yapınızda bir sorun olabilir. Ya da istediğiniz veri setini elde etmek için kullanmanız mecburi olabilir. Yazıma, üzerinde işlem yapacağım tabloları oluşturarak başlamak istiyorum.

CREATE TABLE [dbo].[PivotTable](
 
      [ID] [int]   NOT NULL,
 
      [AdSoyad] [varchar](50) NULL,
 
      [Urun] [varchar](50) NULL,
 
      [Tutar] [float]  NULL,
 
      [Yil] [int] NULL
 
) ON [PRIMARY]

Yukarıdaki Sql Script’ini kendi Sql komut satırınıza çalıştırıp çalıştırın. Böylece tablomuzu oluşturmuş olduk. Bu tabloya karışık bir şekilde insert atacağız.


 

INSERT INTO [dbo].[PivotTable]
           ([ID]
           ,[AdSoyad]
           ,[Urun]
           ,[Tutar]
           ,[Yil])
     VALUES
           (1
           ,'Burak SEÇER'
           ,'Kraker'
           ,10.4
           ,2017)
GO

INSERT INTO [dbo].[PivotTable]
           ([ID]
           ,[AdSoyad]
           ,[Urun]
           ,[Tutar]
           ,[Yil])
     VALUES
           (2
           ,'Melih Hilmi Uludağ'
           ,'Elektrikli Motor'
           ,499
           ,2017)
GO


INSERT INTO [dbo].[PivotTable]
           ([ID]
           ,[AdSoyad]
           ,[Urun]
           ,[Tutar]
           ,[Yil])
     VALUES
           (3
           ,'Burak SEÇER'
           ,'Laptop Bilgisayar'
           ,5000
           ,2016)
GO


INSERT INTO [dbo].[PivotTable]
           ([ID]
           ,[AdSoyad]
           ,[Urun]
           ,[Tutar]
           ,[Yil])
     VALUES
           (4
           ,'Melih Hilmi Uludağ'
           ,'Kraker'
           ,10.4
           ,2017)
GO


INSERT INTO [dbo].[PivotTable]
           ([ID]
           ,[AdSoyad]
           ,[Urun]
           ,[Tutar]
           ,[Yil])
     VALUES
           (4
           ,'Melih Hilmi Uludağ'
           ,'Salep'
           ,5
           ,2016)
GO


Bu kayıtları attıktan sonra tablomuzun son hali şöyle oldu:

Şimdi gelelim asıl konumuza. Bizden kullanıcıların 2017 ve 2016 yılında yaptığı harcamalar isteniyor ve bu harcamalar tek bir satırda gelecek.  Bu durumda aşağıdaki pivot kodunu yazacağız.


SELECT *
FROM (
SELECT
AdSoyad
,Yil
,sum(Tutar) as ToplamTutar
FROM PivotTable
group by AdSoyad ,Yil
) as pTablom
PIVOT
(
SUM(ToplamTutar)
FOR Yil IN ([2017],[2016])
)
AS Pvt

Yukarıdaki kod bize aşağıdaki çıktıyı üretecek;

Burada kodu incelemek gerekirse ilk önce içerdeki select kısmına bakmamı gerek. Müşteri ve yıl bazlı bir gruplama yaptık. Bu gruplamayı yaparken tutar alanlarını toplattırdık. Böylece bize kullanıcıların yıllara göre harcamalarını verdi ancak bizim istediğimiz bu harcamaları tek bir kolonda yazdırmak onun içinde bize dönen değerin içinden ToplamTutar alanını tekrar toplatıp ‘ FOR Yil IN(‘2017′,’2016’) ‘ yazdık. Burada Yil kolonundaki 2017’leri bir kolon yapıp altında ToplamTutar alanının tekrar 2017’ler arasında toplamını yazdırdık. Böylece bize yukarıdaki çıktıyı verdi.

Mutlu yıllar 😉

Bir Cevap Yazın