Ö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:
1 2 3 4 5 6 7 8 |
SELECT [diğer sütunlar], UnpivotedColumn, Value FROM [TabloAdı] UNPIVOT (Value FOR UnpivotedColumn IN ([Sütun1], [Sütun2], ..., [SütunN])) AS Unpvt |
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 UnitPrice
, Quantity
ve Discount
değerlerini ayrı satırlarda göstermek.
1 2 3 4 5 6 7 8 |
SELECT OrderID, ProductID, ValueType, Value FROM (SELECT OrderID, ProductID, UnitPrice, Quantity, Discount FROM [Order Details]) od UNPIVOT (Value FOR ValueType IN (UnitPrice, Quantity, Discount) )AS unpvt; |
OrderID
ve ProductID
için UnitPrice
, Quantity
ve Discount
değerlerini ayrı satırlarda gösterir. Örnek bir çıktı şöyledir;
Burada ValueType
sütunu, hangi değer türünün (UnitPrice
, Quantity
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.