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.
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.
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.
Görüldüğü üzere Yavuz’un notları gelmiş oldu.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.