SQL Server’da PIVOT ve UNPIVOT Kullanımı

Herkese merhaba,

Bu yazıda SQL Server’da PIVOT ve UNPIVOT kullanımından bahsedeceğim.

SQL Server’da yazdığımız sorguları görsel açıdan daha anlamlı ve okunabilir görmek istediğimiz zaman kullanılan yapılardır diyebiliriz.

PIVOT en basit haliyle alt alta sıralanmış kayıtları yan yana getirmeye yarar.

PIVOT işlemini anlamak için ilk olarak aşağıdaki tabloyu oluşturun ve kayıtları tablo içerisine ekleyin.

CREATE TABLE Ogrenciler
(
    Id INT PRIMARY KEY IDENTITY,
    OgrenciAdi VARCHAR(50),
    Kurs VARCHAR(50),
    DersNotu INT
);
GO

INSERT INTO Ogrenciler
VALUES
('Yavuz', 'Türkçe', 85);
INSERT INTO Ogrenciler
VALUES
('Yavuz', 'Matematik', 65);
INSERT INTO Ogrenciler
VALUES
('Pelin', 'Türkçe', 75);
INSERT INTO Ogrenciler
VALUES
('Pelin', 'Matematik', 95);

Sorguyu çalıştırınca tablo oluşacak ve içindeki kayıtlar tabloya eklenmiş olacaktır.

Şimdi PIVOT ifadesini görelim.

--PIVOT Sorgumuz

SELECT *
FROM
(SELECT OgrenciAdi, DersNotu, Kurs FROM Ogrenciler) AS OgrenciTablosu
PIVOT
(
    SUM(DersNotu)
    FOR Kurs IN ([Türkçe], [Matematik])
) AS OgrenciPivotTablosu;

Sorguyu çalıştırınca aşağıdaki ifadeyi göreceksiniz.

SQL Server’da PIVOT ve UNPIVOT Kullanımı

Görüldüğü üzere daha anlamlı bir şekilde sonuçlar görülmüş oldu. PIVOT en sade haliyle bu şekildedir.

Peki UNPIVOT nedir?

UNPIVOT, kısaca tablo sütunlarını satırlara dönüştürmek için kullanılan bir yapıdır diyebiliriz.

UNPIVOT işlemini anlamak için ilk olarak aşağıdaki tabloyu oluşturun ve kayıtları tablo içerisine ekleyin.

CREATE TABLE Ogrenciler2
(
    Id INT PRIMARY KEY IDENTITY,
    OgrenciAdi VARCHAR(50),
    Matematik INT,
    Türkçe INT,
    İngilizce INT,
    Fen INT
);
GO

INSERT INTO Ogrenciler2
VALUES
('Yavuz', 68, 45, 74, 92);
INSERT INTO Ogrenciler2
VALUES
('Pelin', 77, 78, 82, 79);

Sorguyu çalıştırınca tablo oluşacak ve içindeki kayıtlar tabloya eklenmiş olacaktır.

Şimdi UNPIVOT ifadesini görelim.

--UNPIVOT Sorgumuz

SELECT OgrenciAdi, Kurs, DersNotu
FROM Ogrenciler2
UNPIVOT
(
	DersNotu
	FOR Kurs in (Matematik, Türkçe, İngilizce, Fen)
) AS OgrenciUnPivotTablosu

Sorguyu çalıştırınca aşağıdaki ifadeyi göreceksiniz.

SQL Server’da PIVOT ve UNPIVOT Kullanımı

Görüldüğü üzere iki satır olan tablomuzu Kurs ve Ders Notu kolonları varmışçasına göstermiş olduk.

Bazı durumlarda PIVOT halde olan sorgular UNPIVOT hale dönüştürülebiliyor ya da istenen raporun türüne göre de sıfırdan kullanılabiliyor.

UNPIVOT biraz karışık  gelebilir. Yukarıdaki sorguyu şöyle düşünebilirsiniz. Kursa göre ders notlarını öğrenci adına göre görmek istiyorum dediniz. İşte bu sorgu tam işinize yarayan sorgu.

Diyelim ki Yavuz’un ders notlarını özel görmek istiyorum. Sonrasında programlama tarafında ekrana bu tabloya basacağım. Kişi adını web sayfasında ya da masaüstü programda en tepede bir şekilde gösterdiğinizi düşünelim. O zaman aşağıdaki sorgu işinize yarayacaktır. Tabi siz bu işlemi programlama tarafını parametrik yapmalısınız.

SELECT Kurs, DersNotu
FROM Ogrenciler2
UNPIVOT
(
	DersNotu
	FOR Kurs in (Matematik, Türkçe, İngilizce, Fen)
) AS OgrenciUnPivotTablosu
WHERE OgrenciUnPivotTablosu.OgrenciAdi='Yavuz'

Kodu çalıştırdığınızda aşağıdaki sonucu göreceksiniz.

SQL Server’da PIVOT ve UNPIVOT Kullanımı

Görüldüğü üzere Yavuz’un notları gelmiş oldu.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

1.339 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!