MS SQL Web Geliştirme

SQL Server’da UnPivot Table Kullanımı

Yazar İlayda

Önceki yazımda, “SQL Server’da Pivot Table Kullanımı” başlığı altında, SQL Server üzerinde veri analizi yaparken güçlü ve okunabilir raporlar oluşturmamızı sağlayan Pivot Table özelliğini ele almıştık. Bu yazımda ise, Pivot sonuçlarından elde edilen sorgu çıktılarının sütunlarını ve bu sütunlara karşılık gelen satırları dikey olarak birleştirerek, sonuçları iki sütunlu, daha sade bir tablo formatına dönüştürmeyi sağlayan UnPivot Table özelliğinin nasıl kullanılacağını inceleyeceğiz.

UNPIVOT SQL Server’da kullanılan bir operatördür ve temelde, geniş formatlı bir tablonun sütunlarını satırlara dönüştürmeye yarar. Bu işlem, bir tabloyu daha normalleştirilmiş, satır odaklı bir formata çevirir. UNPIVOT işlemi, özellikle Pivot tabloların tersine çevrilmesinde kullanılır.

Pivot işlemi genellikle birden fazla satırı tek bir satıra sıkıştırarak, bir dizi değeri sütunlara dönüştürür. Buna karşın, UNPIVOT tam tersini yaparak, sütunlardaki değerleri ayrı satırlara dönüştürür. Bu işlem, verileri daha analiz edilebilir ve işlenebilir hale getirmek için kullanılır.

Örnek olarak, bir tablonuzda ürünlerin aylık satış miktarları sütun olarak bulunuyorsa, UNPIVOT kullanarak bu sütunları ay ve satış miktarı olarak iki sütunlu bir tablo haline getirebilirsiniz. Bu sayede, her bir satır bir ayın satış miktarını temsil eder hale gelir.

UNPIVOT kullanımı genellikle şu formatta olur:

Bu sorgu, [TabloAdı] içindeki [Sütun1], [Sütun2], ..., [SütunN] sütunlarını UnpivotedColumn ve Value adında iki sütuna dönüştürür. Her bir sütun adı (UnpivotedColumn) ve karşılık gelen değeri (Value) ayrı satırlarda gösterilir.

Diyelim ki Northwind veritabanında ki Order Details tablosundan bazı verileri UNPIVOT kullanarak dönüştürmek istiyoruz. Bu tablo genellikle sipariş ID’si (OrderID), ürün ID’si (ProductID), birim fiyatı (UnitPrice), miktar (Quantity) ve indirim (Discount) içerir.

Her sipariş detayı için UnitPriceQuantity ve Discount değerlerini ayrı satırlarda göstermek.

Bu sorgu sonucunda elde edilecek tablo, her OrderID ve ProductID için UnitPriceQuantity ve Discount değerlerini ayrı satırlarda gösterir. Örnek bir çıktı şöyledir;

Burada ValueType sütunu, hangi değer türünün (UnitPriceQuantity veya Discount) gösterildiğini belirtir, Value sütunu ise o değerin kendisini içerir. Bu yapı, özellikle veri analizi ve raporlama için daha esnek bir format sunar.