Sql Server Pivot Kullanımı

Merhaba arkadaşlar. Bu yazımda sizlere daha önce kullanmadığım ve kullanma ihtiyacım olmayan bir özellikten bashetmek istiyorum. Kullanmadığım için pişman mıyım evet. Gayet güzel anlaşılır ve çok kaliteli raporlar çıkarmak için kesinlikle kullanmanızı tavsiye ederim. Çalıştığım şirket için geliştirdiğim raporda pivot kullanmak zorunda kaldım. Uzun uğraşlar araştırmalar sonucu Pivot mantığını gayet güzel bir şekilde öğrendim. Sizlerinde işine yarayacağına eminim.

Öncelikle biraz Pivot’tan bashedeyim. Pivot komutu Oracle, Ms Sql Server gibi Sql tabanlı databaselerin hepsinde vardır. Bağzı durumlarda OLAP Normalizasyon kurallarına göre hazırlanmış tablolarda OLAP şekilnde sorgulamalara izin verilmeyebilir. Bu gibi durumlarda devreye Pivot sorgulama girer ve size detaylı analiz imkanı verir.

Pivot tabloda alt alta sıralanmış olan kayıtları yan yana kolonlar halinde göstermenize yarar.

Bir örnek ile devam edelim. Ben örneğimde AdventureWorks örnek veritabanını ve SQL Server 2008 R2 ‘yi kullandım. Herkesin rahatça anlayabilmesi için tablo takma isimlerini olabildiğince Türkçe kullandım.

Öncelikle aşağıdaki resimdeki gibi standart sorgumuzda dönen sonuçları ve kayıt sayısını incelemenizi istiyorum.

Resimde de görüldüğü gibi Pivot kullanmadan dönen kayıt sayısı: 532 ve kolon sayısı: 3

Müşteri şöyle bir istekte bulundu diyelim. Tüm bisikletlerden hangi renkte kaç tane bisikletim var görmek istiyorum diye bir talepte bulundu. Yada Dağ bisikletinden hangi renkte kaç tane var görmek istiyorum.

Bu konuda ne yapacağız peki ? Böyle bir durumda çok kolay bir şekilde PIVOT kullanarak müşterinin ihtiyacını karşılayabiliriz. Aşağıdaki resmi incelerseniz ;Resimde görüldüğü gibi dönen kayıt sayısı : 37 kolon sayısı ise :10 Müşterimizin ihtiyacını çok kolay bir şekilde karşılamış olduk.

[sql]

use AdventureWorks
select * from
(
select
AltUrunKategori.Name,Urun.Color,Envanter.Quantity
from Production.Product Urun
inner join Production.ProductSubcategory AltUrunKategori
on AltUrunKategori.ProductSubcategoryID=Urun.ProductSubcategoryID
left join Production.ProductInventory Envanter
on Urun.ProductID=Envanter.ProductID
) Tablom
PIVOT
(
SUM(Quantity)
For Color
IN( [Black],[Red],[Blue],[Mutli],[Silver],[Grey],[White],[Yellow],[Silver/Black])
) PivotTablom

[/sql]

Konu ile ilgili sorularınızı yorum panelinden bana iletebilirsiniz.

Mesut Güneş

Selçuk Üniversitesi Bilgisayar programcılığı bölümünden mezun olduktan sonra birçok firmada Yazılım, İş zekası ve Veritabanı Uzmanı olarak çalıştım. Şuan Türkiye’nin en büyük şirketlerinden biri olan Doğan Online’da Veritabanı Yöneticisi olarak çalışıyorum.

You may also like...

2 Responses

  1. Cemil Büyükkoç dedi ki:

    Merhaba Mesut bey.
    şans eseri sitenize denk geldim. Pivot konusunda araştıma yapıyordum. Örnekle gayet anlaşılır anlatmışsınız elinize sağlık. CEMİL

  2. Denizhan dedi ki:

    Teşekkürler. baya bir işime yaradı.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.