SlideShare a Scribd company logo
Veritabanı Yönetim Sistemi platformlarında (Sql Server, Oracle v.b.) yer alan herkesin pek
bilmediği Pivot ve Unpivot Operatörleri bulunmaktadır. Şimdi gelin hep birlikte Pivot-
Unpivot operatörlerini inceleyelim. Pivot ve Unpivot operatörleri daha çok OLAP
biçimindeki sorgulamalarda ve açık şema uygulamalarında ihtiyaç duyulabilen operatörlerdir.
Burada OLAP ve açık şema uygulamaları derken kastedilen şeyi kısaca açıklamak yerinde
olur. OLAP, veriler üzerinde derinlemesine analiz yapılabilmesine olanak tanıyan bir
teknolojidir. Açık şema uygulamaları ise hazırlanmış bir tablonun normalizasyon kuralları
içinde yeterli çözümleri sağlayamadığı durumlarda farklı bir tablo üzerinde satırların
sütunlara veya sütunların satırlara dönüştürülmesi gerekliliğidir. İşte bu tip durumlarda
devreye Pivot ve Unpivot operatörleri girer. Pivot operatörü bir tablonun satırlarını yani
belirli kayıtlarını sütunlara çevirir. Unpivot operatörü ise bir tablonun sütunlarını satırlara
çevirmektedir. Biliyorum ki bu konuda örnekler yaparsak konu daha iyi anlaşılacaktır.

Öncelikle aşağıdaki şekilde görüldüğü gibi bir tablo oluşturalım.




Tablomuzu Sql kodları ile oluşturmak isteyenler için aşağıdaki kodları kullanabiliriz.

Create Table BilgisayarDetay(
BilgisayarKod int,
Nitelikler nvarchar(50),
Aciklama nvarchar(50)
)

Ardından oluşturduğumuz bu tabloya insert cümleciği vasıtasıyla kayıtlar ekleyelim. Ben
aşağıdaki gibi eklemeler yaptım.

insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Bellek
(GB)','3')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Sabit Disk
(GB)','500')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Ekran
(MB)','512')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Boyut
(Inch)','19')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler)values (1000,'Web Cam')

insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Bellek (GB)','4')

insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Sabit Disk
(GB)','800')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Ekran
(MB)','1024')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Boyut
(Inch)','21')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Web
Cam','Var' )

insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Bellek (GB)','2')

insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Sabit Disk
(GB)','1024')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Ekran
(MB)','1024')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Boyut
(Inch)','17')
insert into BilgisayarDetay(BilgisayarKod,Nitelikler)values (1002,'Web Cam')

Bu kayıtlarımızı ekledikten sonra tablodaki kayıtlarımızın içeriği aşağıdaki gibi gözüküyor
olmalı.




Şimdi gelin Nitelikler kısmında yer alan satırları yani kayıtları Pivot operatörü ile sütunlara
çevirelim. Bu işi gerçekleştirmek için aşağıdaki gibi bir Sql kod bloğu yazmamız gerekiyor.

WITH BilgisayarOzellik AS(
SELECT * FROM BilgisayarDetay
)
SELECT Kayit.* FROM BilgisayarOzellik
PIVOT(MAX(Aciklama)
FOR Nitelikler IN ([Bellek (GB)],[Sabit Disk (GB)],[Ekran (MB)],[Boyut (Inch)],[Web
Cam])
)AS Kayit

Bu kod bloğunu şu şekilde açıklayabiliriz; öncelikle BilgisayarDetay isimli tablomuzun
kayıtlarını pivot sorgusunun çalıştırılacağı BilgisayarOzellik adında sanal bir tabloya yani
sonradan türettiğimiz bir tabloya aktardık. Ardından "SELECT Kayit.* FROM
BilgisayarOzellik" satırı ile BilgisayarOzellik isimli sanal tablomuzun bütün sütünlarını
seçmiş bulunuyoruz. Sonraki kod satırımızda MAX fonksiyonu aklınızı karıştırmış,neden
böyle bir fonksiyon kullandık diyebilirsiniz. Pivot operatörümüzün çalışabilmesi için
gruplama yapabilen bir fonsiyon gereklidir. Bu fonksiyon MAX, MIN veya SUM gibi
gruplama yapabilen bir fonksiyon olabilir. Biz burada Aciklama sütünuna göre MAX
fonksiyonu ile bir gruplama yaptık.Son olarak "FOR Nitelikler IN ([Bellek (GB)],[Sabit Disk
(GB)],[Ekran (MB)],[Boyut (Inch)],[Web Cam])" sql kod satırı ile Nitelikler sütunundaki
kayıtları kullanarak satırları sütunlara çevirmek istediğimizi belirttik. Satırları sütunlara
çevrilecek kısımlar köşeli parantez içinde yazılmıştır. Şimdi yazdığımız bu kod bloğunu
çalıştırdığımızda ekrana gelecek sonucu görelim.




Yukarıdaki şekilden de gördüğümüz gibi Nitelikler içinde yer alan satırlar sütunlara
dönüşmüş durumda ve Aciklama sütunundaki veriler bu yeni sütunlar içindeki kayıtlar olarak
yerini almıştır.

Şimdi de Pivot operatörünün tersi işlemi yapan yani sütunları satırlara çeviren Unpivot
operatörüne ait bir örnek yapalım. Bu işlem için aşağıdaki gibi bir tablo oluşturalım.




Yukarıda görüldüğü gibi Satis adında her bir satıcının yıllık satış miktarlarının tutulduğu bir
tablo oluşturduk. Bu tabloya aşağıdaki gibi kayıtları ekleyelim.




Yukarıda bulunan şekildeki gibi bazı kayıtlarımızı tablomuza girdikten sonra Unpivot
operatörümüzü kullanabiliriz.

SELECT satislar.* FROM Satis
UNPIVOT (SatışMiktari FOR Yıllar IN ([2007],[2008],[2009])
)AS satislar

Bu kod bloğunda Satis tablosunun bütün sütunları,kayıtları satislar isimli sanal bir tabloya
aktarılmıştır. 2007,2008,2009 isimli sütunlar satırlara dönüştürülmek üzere Unpivot operatörü
kullanılmıştır. Bu kod bloğu bize aşağıdaki gibi bir çıktı sunacaktır.




Gördüğümüz gibi yıllar isminde ayrı bir sütun oluşturulmuştur. Ümit ediyorum ki bu makale
ile veritabanı, veri madenciliği, OLAP gibi kavramlar konusunda herkeste bir merak
oluşacaktır ve bu konuda araştırmalar artacaktır.


Tekrar görüşmek dileğiyle.

Görkem SEZGİN

More Related Content

Similar to Pivot Unpivot

İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14
Cihan Özhan
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21
Cihan Özhan
 
Stimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi YapmakStimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi Yapmak
Mustafa BÜKÜLMEZ
 
Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2
Univerist
 
Veritabani Programlama - Oracle IV.Egitim - View Kullanimi
Veritabani Programlama - Oracle IV.Egitim - View KullanimiVeritabani Programlama - Oracle IV.Egitim - View Kullanimi
Veritabani Programlama - Oracle IV.Egitim - View Kullanimi
Sevdanur Genc
 
progressokulu.com Advanced Business Language Slide 11
progressokulu.com Advanced Business Language Slide 11progressokulu.com Advanced Business Language Slide 11
progressokulu.com Advanced Business Language Slide 11kaan verdioglu
 
C dilinde dinamik bellek yönetimi
C dilinde dinamik bellek yönetimiC dilinde dinamik bellek yönetimi
C dilinde dinamik bellek yönetimi
MehmetKelepce
 
Oracle 12c Database In Memory DBA SIG
Oracle 12c Database In Memory DBA SIGOracle 12c Database In Memory DBA SIG
Oracle 12c Database In Memory DBA SIG
Gokhan Atil
 
Access 2013 Hafta 2
Access 2013 Hafta 2Access 2013 Hafta 2
Access 2013 Hafta 2
abdullahgul42
 
Heap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & ExploitingHeap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & Exploiting
SignalSEC Ltd.
 
Matlab
MatlabMatlab
İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02
Cihan Özhan
 
matlab.pptx
matlab.pptxmatlab.pptx
matlab.pptx
SEDATBATU1
 
MS Excel 2013
MS Excel 2013MS Excel 2013
MS Excel 2013
Sakarya Üniversitesi
 
Sql egitimi-istanbul
Sql egitimi-istanbulSql egitimi-istanbul
Sql egitimi-istanbulserpilscd69
 
Ahmet Visual basic
Ahmet Visual basicAhmet Visual basic
Ahmet Visual basic
ahsen1971
 
Exchange Server 2010 Tips and Tricks
Exchange Server 2010 Tips and TricksExchange Server 2010 Tips and Tricks
Exchange Server 2010 Tips and Tricks
Serhad MAKBULOĞLU, MBA
 
Sql konferansi
Sql konferansiSql konferansi
Sql konferansisersld61
 
Sql gorsel-egitim-seti
Sql gorsel-egitim-setiSql gorsel-egitim-seti
Sql gorsel-egitim-setisersld61
 

Similar to Pivot Unpivot (20)

İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14İleri Seviye T-SQL Programlama - Chapter 14
İleri Seviye T-SQL Programlama - Chapter 14
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21
 
Stimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi YapmakStimulsoft Report Rapor Tasarimi Yapmak
Stimulsoft Report Rapor Tasarimi Yapmak
 
Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2Temel Düzeyde MySQL ve PHP Eğitimleri 2
Temel Düzeyde MySQL ve PHP Eğitimleri 2
 
Veritabani Programlama - Oracle IV.Egitim - View Kullanimi
Veritabani Programlama - Oracle IV.Egitim - View KullanimiVeritabani Programlama - Oracle IV.Egitim - View Kullanimi
Veritabani Programlama - Oracle IV.Egitim - View Kullanimi
 
progressokulu.com Advanced Business Language Slide 11
progressokulu.com Advanced Business Language Slide 11progressokulu.com Advanced Business Language Slide 11
progressokulu.com Advanced Business Language Slide 11
 
C dilinde dinamik bellek yönetimi
C dilinde dinamik bellek yönetimiC dilinde dinamik bellek yönetimi
C dilinde dinamik bellek yönetimi
 
Sunu
SunuSunu
Sunu
 
Oracle 12c Database In Memory DBA SIG
Oracle 12c Database In Memory DBA SIGOracle 12c Database In Memory DBA SIG
Oracle 12c Database In Memory DBA SIG
 
Access 2013 Hafta 2
Access 2013 Hafta 2Access 2013 Hafta 2
Access 2013 Hafta 2
 
Heap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & ExploitingHeap Overflow Zafiyetleri & Exploiting
Heap Overflow Zafiyetleri & Exploiting
 
Matlab
MatlabMatlab
Matlab
 
İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02İleri Seviye T-SQL Programlama - Chapter 02
İleri Seviye T-SQL Programlama - Chapter 02
 
matlab.pptx
matlab.pptxmatlab.pptx
matlab.pptx
 
MS Excel 2013
MS Excel 2013MS Excel 2013
MS Excel 2013
 
Sql egitimi-istanbul
Sql egitimi-istanbulSql egitimi-istanbul
Sql egitimi-istanbul
 
Ahmet Visual basic
Ahmet Visual basicAhmet Visual basic
Ahmet Visual basic
 
Exchange Server 2010 Tips and Tricks
Exchange Server 2010 Tips and TricksExchange Server 2010 Tips and Tricks
Exchange Server 2010 Tips and Tricks
 
Sql konferansi
Sql konferansiSql konferansi
Sql konferansi
 
Sql gorsel-egitim-seti
Sql gorsel-egitim-setiSql gorsel-egitim-seti
Sql gorsel-egitim-seti
 

Pivot Unpivot

  • 1. Veritabanı Yönetim Sistemi platformlarında (Sql Server, Oracle v.b.) yer alan herkesin pek bilmediği Pivot ve Unpivot Operatörleri bulunmaktadır. Şimdi gelin hep birlikte Pivot- Unpivot operatörlerini inceleyelim. Pivot ve Unpivot operatörleri daha çok OLAP biçimindeki sorgulamalarda ve açık şema uygulamalarında ihtiyaç duyulabilen operatörlerdir. Burada OLAP ve açık şema uygulamaları derken kastedilen şeyi kısaca açıklamak yerinde olur. OLAP, veriler üzerinde derinlemesine analiz yapılabilmesine olanak tanıyan bir teknolojidir. Açık şema uygulamaları ise hazırlanmış bir tablonun normalizasyon kuralları içinde yeterli çözümleri sağlayamadığı durumlarda farklı bir tablo üzerinde satırların sütunlara veya sütunların satırlara dönüştürülmesi gerekliliğidir. İşte bu tip durumlarda devreye Pivot ve Unpivot operatörleri girer. Pivot operatörü bir tablonun satırlarını yani belirli kayıtlarını sütunlara çevirir. Unpivot operatörü ise bir tablonun sütunlarını satırlara çevirmektedir. Biliyorum ki bu konuda örnekler yaparsak konu daha iyi anlaşılacaktır. Öncelikle aşağıdaki şekilde görüldüğü gibi bir tablo oluşturalım. Tablomuzu Sql kodları ile oluşturmak isteyenler için aşağıdaki kodları kullanabiliriz. Create Table BilgisayarDetay( BilgisayarKod int, Nitelikler nvarchar(50), Aciklama nvarchar(50) ) Ardından oluşturduğumuz bu tabloya insert cümleciği vasıtasıyla kayıtlar ekleyelim. Ben aşağıdaki gibi eklemeler yaptım. insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Bellek (GB)','3') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Sabit Disk (GB)','500') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Ekran (MB)','512') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1000,'Boyut (Inch)','19') insert into BilgisayarDetay(BilgisayarKod,Nitelikler)values (1000,'Web Cam') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Bellek (GB)','4') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Sabit Disk (GB)','800') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Ekran (MB)','1024') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Boyut
  • 2. (Inch)','21') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1001,'Web Cam','Var' ) insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Bellek (GB)','2') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Sabit Disk (GB)','1024') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Ekran (MB)','1024') insert into BilgisayarDetay(BilgisayarKod,Nitelikler,Aciklama)values (1002,'Boyut (Inch)','17') insert into BilgisayarDetay(BilgisayarKod,Nitelikler)values (1002,'Web Cam') Bu kayıtlarımızı ekledikten sonra tablodaki kayıtlarımızın içeriği aşağıdaki gibi gözüküyor olmalı. Şimdi gelin Nitelikler kısmında yer alan satırları yani kayıtları Pivot operatörü ile sütunlara çevirelim. Bu işi gerçekleştirmek için aşağıdaki gibi bir Sql kod bloğu yazmamız gerekiyor. WITH BilgisayarOzellik AS( SELECT * FROM BilgisayarDetay ) SELECT Kayit.* FROM BilgisayarOzellik PIVOT(MAX(Aciklama) FOR Nitelikler IN ([Bellek (GB)],[Sabit Disk (GB)],[Ekran (MB)],[Boyut (Inch)],[Web Cam]) )AS Kayit Bu kod bloğunu şu şekilde açıklayabiliriz; öncelikle BilgisayarDetay isimli tablomuzun kayıtlarını pivot sorgusunun çalıştırılacağı BilgisayarOzellik adında sanal bir tabloya yani sonradan türettiğimiz bir tabloya aktardık. Ardından "SELECT Kayit.* FROM BilgisayarOzellik" satırı ile BilgisayarOzellik isimli sanal tablomuzun bütün sütünlarını seçmiş bulunuyoruz. Sonraki kod satırımızda MAX fonksiyonu aklınızı karıştırmış,neden
  • 3. böyle bir fonksiyon kullandık diyebilirsiniz. Pivot operatörümüzün çalışabilmesi için gruplama yapabilen bir fonsiyon gereklidir. Bu fonksiyon MAX, MIN veya SUM gibi gruplama yapabilen bir fonksiyon olabilir. Biz burada Aciklama sütünuna göre MAX fonksiyonu ile bir gruplama yaptık.Son olarak "FOR Nitelikler IN ([Bellek (GB)],[Sabit Disk (GB)],[Ekran (MB)],[Boyut (Inch)],[Web Cam])" sql kod satırı ile Nitelikler sütunundaki kayıtları kullanarak satırları sütunlara çevirmek istediğimizi belirttik. Satırları sütunlara çevrilecek kısımlar köşeli parantez içinde yazılmıştır. Şimdi yazdığımız bu kod bloğunu çalıştırdığımızda ekrana gelecek sonucu görelim. Yukarıdaki şekilden de gördüğümüz gibi Nitelikler içinde yer alan satırlar sütunlara dönüşmüş durumda ve Aciklama sütunundaki veriler bu yeni sütunlar içindeki kayıtlar olarak yerini almıştır. Şimdi de Pivot operatörünün tersi işlemi yapan yani sütunları satırlara çeviren Unpivot operatörüne ait bir örnek yapalım. Bu işlem için aşağıdaki gibi bir tablo oluşturalım. Yukarıda görüldüğü gibi Satis adında her bir satıcının yıllık satış miktarlarının tutulduğu bir tablo oluşturduk. Bu tabloya aşağıdaki gibi kayıtları ekleyelim. Yukarıda bulunan şekildeki gibi bazı kayıtlarımızı tablomuza girdikten sonra Unpivot operatörümüzü kullanabiliriz. SELECT satislar.* FROM Satis UNPIVOT (SatışMiktari FOR Yıllar IN ([2007],[2008],[2009]) )AS satislar Bu kod bloğunda Satis tablosunun bütün sütunları,kayıtları satislar isimli sanal bir tabloya aktarılmıştır. 2007,2008,2009 isimli sütunlar satırlara dönüştürülmek üzere Unpivot operatörü
  • 4. kullanılmıştır. Bu kod bloğu bize aşağıdaki gibi bir çıktı sunacaktır. Gördüğümüz gibi yıllar isminde ayrı bir sütun oluşturulmuştur. Ümit ediyorum ki bu makale ile veritabanı, veri madenciliği, OLAP gibi kavramlar konusunda herkeste bir merak oluşacaktır ve bu konuda araştırmalar artacaktır. Tekrar görüşmek dileğiyle. Görkem SEZGİN