Koray Kırdinli

Yazılım ve İş Yaşamı Hakkında Paylaşımlar

SQL 2005 de PIVOT kullanımı

Bu yazıda internetteki araştırmalarım sonucunda hoşuma giden veritabanı ve programcılık konusundaki pratikleri paylaşacağım. Bu yazıyı her yeni pratik bulduğumda güncellemeyi düşünüyorum.

1 – SQL Server 2005 ve üzerinde PIVOT-UNPIVOT keywordları ile bir tablodaki sütunları satırlara satırları sütunlara çevirmeniz mümkün.Sql 2000’de bunu yapmak için çok efor sarfetmek gerekiyordu.Performans açısından fazla bir fark olmamasına rağmen kullanım olarak bizlere kolaylık sağladığı kesin.

İki tane tablomuz olsun.Bir tanesi stok kartlarımızı listesin diğeri de bu kart üzerinde yapılan işlemleri listelesin.

CREATE TABLE Stok(
stokkod int,
stokad
)
CREATE TABLE Hareket(
hareketno int,
stokkod int,
fistipi NVARCHAR(30),
deger SQL_VARIANT
)

Şimdi şöyle bir şeye ihtiyacımız olduğunu düşünelim. Her bir fiştipini sütunlarda göstererek şöyle bir tablo elde etmeliyiz
StokAdı -AlımFaturası – SatışFaturası
1                –  200                –  300
2               –  200                – 400

Eski teknikle şöyle bir sorgu yapardık muhtemelen
SELECT
(SELECT SUM(deger) FROM Hareket WHERE fistipi=’Alım Faturası’ AND stokkod=S.Stokkod) As AlimFaturasi,
(SELECT SUM(deger) FROM Hareket WHERE fistipi=’Satış Faturası’ AND stokkod=S.Stokkod) As SatisFaturasi
FROM Stok S

YENİ YÖNTEMLE

SELECT S.*
FROM Hareket
PIVOT
(
SUM( deger )
FOR ozellik IN( [Alım Faturası] , [Satış Faturası] )
) AS S
WHERE StokKod>0

Sorgunun çalışıp çalışmadığını sql server 2005 kurulu olmadığı için deneme fırsatım olmadı ancak burada önemli olan mantığı kavramak ve müşterilere daha anlamlı ve güzel raporlar sunabilmek.

Herkese iyi çalışmalar

March 20, 2009 - Posted by | MSSql | , ,

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s