Statik Pivot Sorgulamalar Ve Kullanımları

Kodla Büyü

togius

Süper Üye
Süper Üye
Mesajlar
1,728
Pivot tablo, rapor halindeki verilerin daha anlaşılır bir biçimde ve özet halinde sunulması için sıkça kullanılan bir yöntemdir. Daha çok gruplamak ve ortalama değerlerle birlikte görüntülemek amacıyla kullanılır. Pivot tablo kullanarak ilgili tablodaki verileri yatay olarak gösterebiliriz. Daha doğrusu satırlarda bulunan bilgileri istediğimiz alanlara göre sütunlara çeviririz. Özellikle rapor hazırlarken verileri daha anlaşılır ve düzenli hale getirmemizi sağlar.

Kod:
SELECT
[sutun1], -- tüm sutunlarının yerine * da kullanabilirsiniz.
[sutun2]
...
FROM (
SELECT       -- select cümlesi ile pivot sql sorgusu.
) AS TableTakmaAdi   -- tabloya takma ad veriyoruz
PIVOT
(
<MIN,MAX,SUM,COUNT...gibi fonksiyonlar>(yapılacak işlem göre yer alacak sütun veya sütunlar) 
FOR [Pivot tablo sütunları için sütun adını içeren değer veya değerler]
IN (
[sutun1], ... ,[sutun5]     -- görüntülenecek sutunlar
)
) AS PivotTableTakmaAdi     -- Pivot tablo için verilen takma ad.
ORDER BY clause       -- tercihe göre isterseniz belli bir kritele sıralamada yaptırabilirsiniz.



Gelin Bunu Basit Bir Statik Pivot Uygulaması Yapalım (Dinamik Pivot Uygulamalarını farklı bir makalede ele alacağım.)

Kod:
Create Table dbo.TOgrenciler (
	OgrenciID int identity(1,1),
	Ad nvarchar(50),
	Soyad nvarchar(50),
	Sehir nvarchar(50),
	Cinsiyet bit default 0,
	Constraint PK_TOgrenciler Primary Key (OgrenciID Asc)
)

Kodu ile Ms Sql Serverımızda tablomuzu oluşturalım. Tabi iyi bir deney yapabilmek için bize deney yapmamızı sağlayacak veriler gerekli verileride hızlı bir şekilde oluşturalım.

Kod:
Declare @Sayac int
Set @Sayac=0
Declare @Ad nvarchar(50),@Soyad nvarchar(50), @Sehir nvarchar(50)
Declare @Cinsiyet bit
Set @Cinsiyet=0
while(@Sayac<1587)
 Begin
	Set @Ad = SUBSTRING(CONVERT(nvarchar(50),NEWID()),1,6)
	Set @Soyad = SUBSTRING(CONVERT(nvarchar(50),NEWID()),1,6)

	if @Sayac%6 = 0 
		Set @Sehir = 'Ankara'
	else if @Sayac%6=1
		Set @Sehir = 'İzmir'
	else if @Sayac%6=2
		Set @Sehir = 'İstanbul'
	else if @Sayac%6=3
		Set @Sehir='Bursa'
	else if @Sayac%6=4
		Set @Sehir='Antalya'
	else
		Set @Sehir='Konya'
	
	if @Sayac%7=0 or @Sayac%11=0 or @Sayac%3=0
		Set @Cinsiyet=1
	else
		Set @Cinsiyet=0

	Insert Into dbo.TOgrenciler(Ad,Soyad,Cinsiyet,Sehir) Values (@Ad,@Soyad,@Cinsiyet,@Sehir)	 
	Set @Sayac = @Sayac + 1
 End
Ben böyle bir kod ile 1587 adet öğrenci kaydı oluşturdum.

Gelelim Pivot Sorgumuza

Kod:
Select p.Sehir, p.[1] as Erkek, p.[0] as Kiz From (
	Select Sehir,Cinsiyet, COUNT(Cinsiyet) as Toplam
	From TOgrenciler Group By Sehir,Cinsiyet) as gTablo	
Pivot (Sum(Toplam) For Cinsiyet in ([1],[0])) as p

Hem kompleks hemde kolay bir sorgulama yöntemi hemde hızlı. Arkadaşlar veri çekimi hızı uygulamalarınız büyüdükçe veya kullandığınız sistem yetkileriniz (Yayınladığınız serverlarda hakkınıza tanımlı olan ram - cpu haklarınız azaldıkça çok ama çok büyük önem arzediyor.)

Bende Sonuç
Sehir Erkek Kiz
Ankara 265 NULL
Antalya 58 206
Bursa 264 NULL
İstanbul 59 206
İzmir 59 206
Konya 57 207


Dinamik Pivot uygulamasını daha sonra anlatacağım.
 
Geri
Üst