SQL veritabanlarında veri analizi ve raporlama süreçlerinde karşılaşılan en yaygın zorluklardan biri, verilerin sunum formatını değiştirmektir. Pivot ve Unpivot işlemleri, bu tür veri dönüşümlerini kolaylaştıran güçlü araçlardır. Pivot, dikey satırları yatay sütunlara dönüştürerek özet tablolar oluştururken, Unpivot ise yatay sütunları dikey satırlara çevirerek normalleştirilmiş bir görünüm sağlar. Bu işlemler, veri analistlerinin ve geliştiricilerin veriyi daha anlamlı hale getirmesine olanak tanır.

SQL’de Pivot İşlemi

Pivot işlemi, SQL’de satırlardaki benzersiz değerleri sütun başlıkları olarak yeniden düzenlemenizi sağlayan güçlü bir veri dönüştürme aracıdır. Genellikle veri özetleri, çapraz tablolar veya belirli bir kategoriye göre gruplandırılmış toplamlar oluşturmak için kullanılır. Temel amacı, dikey bir veri kümesini daha yatay ve okunabilir bir formata getirmektir.

Bir Pivot işlemi gerçekleştirdiğinizde, bir veya daha fazla sütunun değerleri yeni sütun başlıkları haline gelir ve bu yeni sütunların değerleri ise genellikle bir toplama (aggregate) fonksiyonu (SUM, COUNT, AVG, MAX, MIN vb.) kullanılarak hesaplanır. Örneğin, farklı aylardaki satış miktarlarını tek bir satırda, her ayın kendi sütunu altında görmek istediğinizde Pivot devreye girer.

Pivot Kullanım Senaryoları

  • Raporlama: Aylık, yıllık veya çeyreklik satış raporlarını, her dönemin kendi sütununda göstererek daha anlaşılır hale getirme.
  • Veri Analizi: Farklı ürün kategorilerinin veya bölgelerin performansını tek bir görünümde karşılaştırma.
  • Görselleştirme Öncesi Hazırlık: Grafik ve çizelge oluşturmak için belirli bir formatta veri gerektiren araçlara veri sağlama.
  • Daha Okunabilir Tablolar: Çok sayıda satırı olan, ancak belirli bir boyuta göre özetlenmesi gereken tabloları basitleştirme.

Pivot Örneği

Aşağıdaki örnekte, farklı bölgelerdeki aylık satış miktarlarını içeren bir tablonun nasıl Pivot işlemiyle bölgelere göre aylık satış toplamlarını gösteren yatay bir tabloya dönüştürüldüğünü görebilirsiniz.

Örnek Veri Seti Oluşturma:

CREATE TABLE Satislar (
    Bolge VARCHAR(50),
    Ay VARCHAR(20),
    SatisMiktari INT
);

INSERT INTO Satislar (Bolge, Ay, SatisMiktari) VALUES
('Kuzey', 'Ocak', 100),
('Kuzey', 'Şubat', 120),
('Güney', 'Ocak', 90),
('Güney', 'Şubat', 110),
('Doğu', 'Ocak', 150),
('Doğu', 'Şubat', 130),
('Kuzey', 'Mart', 105),
('Güney', 'Mart', 95),
('Doğu', 'Mart', 140);

Pivot Sorgusu:

SELECT Bolge, Ocak, Şubat, Mart
FROM (
    SELECT Bolge, Ay, SatisMiktari
    FROM Satislar
) AS SourceTable
PIVOT
(
    SUM(SatisMiktari) -- Toplama fonksiyonu
    FOR Ay IN ([Ocak], [Şubat], [Mart]) -- Sütunlara dönüştürülecek değerler
) AS PivotTable;

Bu sorgunun sonucu aşağıdaki gibi olacaktır:

Bolge | Ocak | Şubat | Mart
------|------|-------|-----
Kuzey | 100  | 120   | 105
Güney | 90   | 110   | 95
Doğu  | 150  | 130   | 140

Gördüğünüz gibi, her bölge için Ocak, Şubat ve Mart aylarına ait satış miktarları ayrı sütunlarda özetlenmiştir.

SQL’de Unpivot İşlemi

Unpivot işlemi, Pivot işleminin tam tersidir. Yani, yatay (geniş) bir tablodaki sütunları dikey (dar) satırlara dönüştürmek için kullanılır. Bu, özellikle verilerin normalleştirilmesi gerektiğinde veya farklı kaynaklardan gelen, anormalleştirilmiş (örneğin, her ay için ayrı bir sütun içeren) verileri standart bir yapıya getirmek istediğinizde kullanışlıdır.

Unpivot, genellikle bir tabloyu “anahtar-değer” çiftleri formatına dönüştürür. Mevcut sütun isimleri, yeni bir “anahtar” sütunun değerleri haline gelirken, bu sütunlardaki orijinal değerler de yeni bir “değer” sütununa taşınır. Bu işlem, veriyi daha esnek bir şekilde sorgulamak ve analiz etmek için temel bir adımdır.

Unpivot Kullanım Senaryoları

  • Veri Normalleştirme: Yatay olarak genişlemiş tabloları (örn. her yıl veya ay için ayrı sütunlar) daha standart, dikey bir formata dönüştürme.
  • Veri Ambarı ve ETL Süreçleri: Kaynak sistemlerden gelen geniş tabloları, veri ambarı şemasına uygun dar tablolara dönüştürme.
  • Raporlama ve Analiz Esnekliği: Belirli bir ölçütün (örn. ay) dinamik olarak sorgulanabilmesi için veriyi yeniden yapılandırma.
  • Uygulama Entegrasyonu: Bazı uygulamalar veya API’ler, verileri anahtar-değer çiftleri şeklinde talep ettiğinde Unpivot oldukça faydalıdır.

Unpivot Örneği

Aşağıdaki örnekte, Pivot işlemiyle oluşturduğumuz veya benzer yapıda olan aylık satış raporunun (yatay format) Unpivot işlemiyle tekrar dikey formata nasıl dönüştürüldüğünü görebilirsiniz.

Örnek Veri Seti Oluşturma (Pivot edilmiş gibi düşünülen):

CREATE TABLE AylikSatisRaporu (
    Bolge VARCHAR(50),
    Ocak INT,
    Şubat INT,
    Mart INT
);

INSERT INTO AylikSatisRaporu (Bolge, Ocak, Şubat, Mart) VALUES
('Kuzey', 100, 120, 105),
('Güney', 90, 110, 95),
('Doğu', 150, 130, 140);

Unpivot Sorgusu:

SELECT Bolge, Ay, SatisMiktari
FROM AylikSatisRaporu
UNPIVOT
(
    SatisMiktari FOR Ay IN (Ocak, Şubat, Mart) -- SatisMiktari yeni değer sütunu, Ay yeni anahtar sütunu
) AS UnpivotTable;

Bu sorgunun sonucu aşağıdaki gibi olacaktır:

Bolge | Ay    | SatisMiktari
------|-------|-------------
Kuzey | Ocak  | 100
Kuzey | Şubat | 120
Kuzey | Mart  | 105
Güney | Ocak  | 90
Güney | Şubat | 110
Güney | Mart  | 95
Doğu  | Ocak  | 150
Doğu  | Şubat | 130
Doğu  | Mart  | 140

Gördüğünüz gibi, Ocak, Şubat ve Mart sütunları, Ay adında tek bir sütuna dönüştürülmüş ve ilgili satış miktarları da SatisMiktari sütununda yer almıştır.

Pivot ve Unpivot Arasındaki Farklar ve Kullanım Amaçları

Pivot ve Unpivot, veri dönüşümü konusunda birbirini tamamlayan ancak zıt yönlerde çalışan iki güçlü SQL fonksiyonudur. Aralarındaki temel fark, veriyi hangi yönde dönüştürdükleridir:

  • Pivot: “Dikeyden Yataya” dönüşüm yapar. Satırlardaki benzersiz değerleri sütun başlıklarına taşır ve genellikle toplama fonksiyonlarıyla birleştirilerek özetlenmiş, çapraz tablolar oluşturur. Temel amacı, veriyi daha özetlenmiş ve raporlamaya uygun hale getirmektir.
  • Unpivot: “Yataydan Dikeye” dönüşüm yapar. Geniş bir tablonun birden fazla sütununu, yeni bir “anahtar” sütunu ve bir “değer” sütunu oluşturarak dikey satırlara dönüştürür. Temel amacı, anormalleştirilmiş veriyi normalleştirmek, veri ambarı yüklemelerine hazırlamak veya daha esnek sorgulamalar için veri yapısını basitleştirmektir.

Her iki işlem de veri analistleri ve geliştiriciler için kritik öneme sahiptir. Pivot, karmaşık veri kümelerinden hızlı ve anlaşılır özetler çıkarmak için idealdir. Unpivot ise, farklı formatlardaki verileri standart bir yapıya getirme ve büyük veri kümelerinde toplu işlemler yapma konusunda büyük kolaylık sağlar. Bu iki fonksiyonu anlamak ve doğru senaryolarda kullanmak, veri manipülasyonu yeteneğinizi önemli ölçüde artıracaktır.

SQL’deki Pivot ve Unpivot işlemleri, veri dönüşümü ve raporlama ihtiyaçları için vazgeçilmez araçlardır. Pivot, veriyi daha okunabilir ve özetlenmiş bir formatta sunarak analitik süreçleri kolaylaştırırken, Unpivot ise normalleştirme ve toplu veri işleme için ideal bir çözüm sunar. Bu fonksiyonları etkin bir şekilde kullanmak, SQL geliştiricileri ve veri analistleri için veri manipülasyonu becerilerini önemli ölçüde geliştirecek ve daha esnek raporlama imkanları sağlayacaktır.