Program
Satırları sütunlara döndürmek, analistlerin ham veriyi yorumlaması daha kolay, iyi yapılandırılmış ve anlamlı biçimlere dönüştürmesini sağlar. Bu işlem, raporlama için verileri birleştirip düzenlemeye yardımcı olur; karar alma süreçlerini iyileştirir ve gözden kaçabilecek eğilimleri ortaya çıkarır. Bu tür dönüşümler; finans, perakende ve sağlık gibi düzenli veriye hızlı erişimin kritik iş kararlarını yönlendirebildiği alanlarda yararlıdır.
Bu rehberde, pratik örnekler ve veritabanına özgü uygulamalarla SQL pivot tekniklerinin güçlü dünyasını inceleyeceğim. SQL becerilerinizi derinleştirmek istiyorsanız, veri birleştirme ve gruplama konularını öğrenmek için DataCamp’in Orta Düzey SQL kursunu öneririm. Ekibinizde analistler ve mühendisler olan bir iş paydaşıysanız, tüm ekibinizi aynı anda geliştirmek için DataCamp’in kurumsal çözümlerini değerlendirin.
SQL’de Satırların Sütunlara Döndürülmesi Ne Anlama Gelir?
SQL’de pivotlama, verilerin satır temelli bir formattan sütun temelli bir formata dönüştürülmesini ifade eder. Bu dönüşüm, raporlama ve veri analizi için yararlı olup, daha yapılandırılmış ve kompakt bir veri görünümü sağlar. Satırları sütunlara döndürmek, kullanıcıların verileri kilit içgörüleri daha net vurgulayacak şekilde analiz edip özetlemesine de olanak tanır.
Şu örneği düşünün: Günlük satış işlemlerinin yer aldığı bir tablom var ve her satırda tarih, ürün adı ve satış tutarı kayıtlı.
| Tarih | Ürün | Satış |
|---|---|---|
| 2024-01-01 | Dizüstü Bilgisayar | 100 |
| 2024-01-01 | Fare | 200 |
| 2024-01-02 | Dizüstü Bilgisayar | 150 |
| 2024-01-02 | Fare | 250 |
Bu tabloyu pivotlayarak her ürünü bir sütun olarak gösterebilir, her tarihe ait satışları ilgili sütunun altında toplayabilirim. Ayrıca bir birleştirme/özetlemenin gerçekleştiğine dikkat edin.
| Tarih | Dizüstü Bilgisayar | Fare |
|---|---|---|
| 2024-01-01 | 100 | 200 |
| 2024-01-02 | 150 | 250 |
Geleneksel olarak pivot işlemleri, koşullu birleştirme/özetleme içeren karmaşık SQL sorguları gerektirirdi. Zamanla SQL uygulamaları evrildi ve günümüzde birçok modern veritabanı daha verimli ve doğrudan dönüşümler için PIVOT ve UNPIVOT işleçlerini içeriyor.
SQL’de Satırları Sütunlara Döndürmeyi Anlamak
SQL pivot işlemi, satır değerlerini sütunlara çevirerek veriyi dönüştürür. Aşağıda SQL pivot’un temel sözdizimi ve şu parçalardan oluşan yapısı yer alır:
-
SELECT:
SELECTdeyimi, SQL pivot tablosunda döndürülecek sütunlara başvurur. -
Alt sorgu: Alt sorgu, SQL pivot tablosuna dahil edilecek veri kaynağını veya tabloyu içerir.
-
PIVOT:
PIVOTişleci, pivot tabloda uygulanacak özetlemeleri ve filtreyi barındırır.
-- Select static columns and pivoted columns
SELECT <static columns>, [pivoted columns]
FROM
(
-- Subquery defining source data for pivot
<subquery that defines data>
) AS source
PIVOT
(
-- Aggregate function applied to value column, creating new columns
<aggregation function>(<value column>)
FOR <column to pivot> IN ([list of pivoted columns])
) AS pivot_table;
SQL’de satırları sütunlara nasıl döndüreceğimizi göstermek için aşağıdaki adım adım örneğe bakalım. Aşağıda SalesData tablosu yer alıyor.

SQL PIVOT işleci kullanılarak dönüştürülecek tablo örneği. Görsel: Yazar.
Bu veriyi, her ürünün günlük satışlarını karşılaştıracak şekilde pivotlamak istiyorum. PIVOT işleçini yapılandıracak alt sorguyu seçerek başlayacağım.
-- Subquery defining source data for pivot
SELECT Date, Product, Sales
FROM SalesData;
Şimdi, PIVOT işleciyle Product değerlerini sütunlara dönüştürüp Sales’i SUM işleciyle birleştireceğim.
-- Select Date and pivoted columns for each product
SELECT Date, [Laptop], [Mouse]
FROM
(
-- Subquery to fetch Date, Product, and Sales columns
SELECT Date, Product, Sales FROM SalesData
) AS source
PIVOT
(
-- Aggregate Sales by Product, pivoting product values to columns
SUM(Sales)
FOR Product IN ([Laptop], [Mouse])
) AS pivot_table;

SQL’de satırları sütunlara döndürme kullanılarak elde edilen çıktı dönüşümü örneği. Görsel: Yazar.
Pivotlama veriyi özetlemeyi basitleştirirken, bu tekniğin potansiyel sorunları da vardır. Aşağıda SQL pivot ile ilgili olası zorluklar ve bunları ele alma yolları yer almaktadır.
-
Dinamik Sütun Adları: Pivotlanacak değerler (ör. Ürün türleri) bilinmiyorsa, sütun adlarını sabitlemek işe yaramaz. SQL Server gibi bazı veritabanları bu sorunu aşmak için saklı yordamlarla dinamik SQL’i destekler; diğerlerinde ise uygulama katmanında ele almak gerekir.
-
NULL Değerlerle Başa Çıkma: Belirli bir pivotlanmış sütun için veri yoksa sonuçta
NULLgörünebilir.NULLdeğerleri sıfır veya başka bir yer tutucuyla değiştirmek içinCOALESCEkullanabilirsiniz. -
Veritabanları Arası Uyumluluk: Tüm veritabanları
PIVOTişleci için doğrudan destek sunmaz. SQL lehçenizde doğrudan destek yoksa, benzer sonuçlarıCASEifadeleri ve koşullu birleştirme/özetleme ile elde edebilirsiniz.
SQL Satırları Sütunlara Döndürme: Örnekler ve Kullanım Alanları
SQL’de veriyi pivotlamak için, kullanılan veritabanına veya diğer gereksinimlere bağlı olarak farklı yöntemler kullanılır. PIVOT işleci SQL Server’da yaygınken, CASE ifadeleri gibi diğer teknikler, doğrudan PIVOT desteği olmadan da benzer dönüşümler sağlar. SQL’de veriyi pivotlamanın iki yaygın yöntemini ve artı-eksi yönlerini ele alacağım.
PIVOT işleci kullanma
PIVOT işleci, SQL Server’da kullanılabilir ve bir özetleme fonksiyonu belirleyip pivotlanacak sütunları tanımlayarak satırları sütunlara döndürmenin doğrudan bir yolunu sunar.
Aşağıdaki sales_data adlı tabloyu ele alalım.

PIVOT işleci kullanılarak dönüştürülecek Orders tablosu örneği. Görsel: Yazar.
PIVOT işleciyle veriyi birleştirerek her yılın toplam sales_revenue değerini sütunlarda göstereceğim.
-- Use PIVOT to aggregate sales revenue by year
SELECT *
FROM (
-- Select the relevant columns from the source table
SELECT sale_year, sales_revenue
FROM sales_data
) AS src
PIVOT (
-- Aggregate sales revenue for each year
SUM(sales_revenue)
-- Create columns for each year
FOR sale_year IN ([2020], [2021], [2022], [2023])
) AS piv;

SQL PIVOT kullanılarak elde edilen çıktı dönüşümü örneği. Görsel: Yazar.
PIVOT işleci kullanmanın şu avantaj ve sınırlamaları vardır:
-
Avantajlar: Sütunlar doğru şekilde indekslendiğinde yöntem etkilidir. Ayrıca basit ve daha okunabilir bir sözdizimine sahiptir.
-
Sınırlamalar: Tüm veritabanları
PIVOTişleçini desteklemez. Sütunların önceden belirtilmesini gerektirir ve dinamik pivotlama ek karmaşıklık ister.
CASE ifadeleriyle manuel pivotlama
PIVOT işleçlerini desteklemeyen MySQL ve PostgreSQL gibi veritabanlarında veriyi manuel olarak pivotlamak için CASE ifadelerini de kullanabilirsiniz. Bu yaklaşım, her satırı değerlendirip belirli ölçütlere göre yeni sütunlara koşullu olarak değer atayan koşullu birleştirme/özetleme kullanır.
Örneğin, aynı sales_data tablosunda CASE ifadeleriyle veriyi manuel olarak pivotlayabiliriz.
-- Aggregate sales revenue by year using CASE statements
SELECT
-- Calculate total sales revenue for each year
SUM(CASE WHEN sale_year = 2020 THEN sales_revenue ELSE 0 END) AS sales_2020,
SUM(CASE WHEN sale_year = 2021 THEN sales_revenue ELSE 0 END) AS sales_2021,
SUM(CASE WHEN sale_year = 2022 THEN sales_revenue ELSE 0 END) AS sales_2022,
SUM(CASE WHEN sale_year = 2023 THEN sales_revenue ELSE 0 END) AS sales_2023
FROM
sales_data;

SQL CASE ifadesi kullanılarak elde edilen çıktı dönüşümü örneği. Görsel: Yazar.
CASE ifadesiyle dönüşüm yapmanın şu avantaj ve sınırlamaları vardır:
-
Avantajlar: Yöntem tüm SQL veritabanlarında çalışır ve ürün adları bilinmediğinde veya sık değiştiğinde bile dinamik olarak yeni sütunlar üretmek için esnektir.
-
Sınırlamalar: Pivotlanacak çok sayıda sütun varsa sorgular karmaşık ve uzun hale gelebilir. Çoklu koşullu kontroller nedeniyle
PIVOTişlemine kıyasla biraz daha yavaştır.
Satırları Sütunlara Döndürürken Performansla İlgili Hususlar
SQL’de satırları sütunlara döndürmek, özellikle büyük veri kümeleriyle çalışırken performans açısından etkiler yaratabilir. Verimli pivot sorguları yazmanıza, performansı optimize etmenize ve yaygın tuzaklardan kaçınmanıza yardımcı olacak bazı ipuçları ve iyi uygulamalar şunlardır.
En iyi uygulamalar
Sorgularınızı optimize edip performansı artırmak için şu en iyi uygulamaları izleyin.
-
İndeksleme Stratejileri: Doğru indeksleme, SQL’in veriyi daha hızlı alıp işlemesini sağlayarak pivot sorgularını optimize etmek için kritik önemdedir. Tarama sürelerini azaltmak için
WHEREkoşulunda sık kullanılan veya gruplayacağınız sütunları her zaman indeksleyin. -
İç İçe Pivotlardan Kaçının: Tek bir sorguda birden fazla pivot işlemini üst üste koymak okumayı zorlaştırır ve yürütmeyi yavaşlatır. Sorguyu parçalara ayırarak basitleştirin veya geçici bir tablo kullanın.
-
Pivotta Sütun ve Satırları Sınırlayın: Analiz için gerekli olan sütunları pivotlayın; çok sayıda sütunu pivotlamak kaynak tüketimini artırır ve büyük tablolar oluşturur.
Yaygın tuzaklardan kaçınma
Pivot sorgularında karşılaşabileceğiniz yaygın hatalar ve bunlardan kaçınma yolları şunlardır.
-
Gereksiz Tam Tablo Taramaları: İlgili indeksler yoksa pivot sorguları tam tablo taramalarını tetikleyebilir. Önemli sütunları indeksleyerek ve pivotlamadan önce veriyi filtreleyerek tam taramalardan kaçının.
-
Sık Pivotlama için Dinamik SQL Kullanımı: Dinamik SQL, sorgu yeniden derlemeleri nedeniyle performansı yavaşlatabilir. Bu sorunu önlemek için dinamik pivotları önbelleğe alın veya belirli senaryolarla sınırlayın; mümkün olduğunda dinamik sütunları uygulama katmanında ele almayı düşünün.
-
Ön Filtreleme Olmadan Büyük Veri Kümelerinde Özetleme: Büyük veri kümelerinde
SUMveyaCOUNTgibi özet fonksiyonları veritabanı performansını yavaşlatabilir. Tüm veri kümesini pivotlamak yerine önceWHEREkoşuluyla veriyi filtreleyin. -
Pivotlanmış Sütunlarda NULL Değerleri: Belirli bir sütun için veri yoksa pivot işlemleri sıklıkla
NULLdeğerleri üretir. Bunlar sorguları yavaşlatıp sonuçların yorumunu zorlaştırabilir. Bu sorunu önlemek içinCOALESCEgibi fonksiyonlarlaNULLdeğerleri varsayılan bir değerle değiştirin. -
Yalnızca Örnek Veriyle Test Etme: Pivot sorguları, artan bellek ve işlem gereksinimleri nedeniyle büyük veri kümelerinde farklı davranabilir. Performans etkilerini doğru değerlendirmek için pivot sorgularını her zaman gerçek veya temsili veri örnekleri üzerinde test edin.
İşlemlerden ve hata yönetiminden sorgu performansını iyileştirmeye kadar her şeyi kapsayan SQL Server Developer kariyer yolumuzu deneyin.
Veritabanına Özgü Uygulamalar
Pivot işlemleri SQL Server, MySQL ve Oracle gibi veritabanları arasında önemli ölçüde farklılık gösterir. Her bir veritabanının kendine özgü sözdizimi ve sınırlamaları vardır. Farklı veritabanlarında veriyi pivotlamaya ilişkin örnekleri ve temel özelliklerini ele alacağım.
SQL Server
SQL Server, satırları sütunlara döndürürken doğrudan bir yaklaşım sunan yerleşik PIVOT işleci sağlar. PIVOT işleci kullanımı kolaydır ve SQL Server’ın güçlü özetleme fonksiyonlarıyla entegre çalışır. SQL’de pivotlamanın temel özellikleri şunlardır:
-
PIVOT ve UNPIVOT için Doğrudan Destek: SQL Server’ın
PIVOTişleci, satırdan sütuna hızlı dönüşüm sağlar.UNPIVOTişleci de bu süreci tersine çevirebilir. -
Özetleme Seçenekleri:
PIVOTişleciSUM,COUNTveAVGgibi çeşitli özet fonksiyonlarına izin verir.
SQL Server’daki PIVOT işlecinın sınırlaması, pivotlanacak sütun değerlerinin önceden bilinmesini gerektirmesidir; bu da dinamik olarak değişen veriler için esnekliğini azaltır.
Aşağıdaki örnekte, PIVOT işleci Product değerlerini sütunlara dönüştürür ve Sales’i SUM işleciyle birleştirir.
-- Select Date and pivoted columns for each product
SELECT Date, [Laptop], [Mouse]
FROM
(
-- Subquery to fetch Date, Product, and Sales columns
SELECT Date, Product, Sales FROM SalesData
) AS source
PIVOT
(
-- Aggregate Sales by Product, pivoting product values to columns
SUM(Sales)
FOR Product IN ([Laptop], [Mouse])
) AS pivot_table;
Veri analizi için SQL Server’ın temellerine hakim olmak üzere DataCamp’in SQL Server’a Giriş kursunu öneririm.
MySQL
MySQL, yerel PIVOT işleci desteğine sahip değildir. Ancak, satırları sütunlara manuel olarak döndürmek ve SUM, AVG ve COUNT gibi diğer özet fonksiyonlarıyla birleştirmek için CASE ifadesini kullanabilirsiniz. Bu yöntem esnek olsa da, pivotlanacak çok sütun olduğunda karmaşıklaşabilir.
Aşağıdaki sorgu, her ürün için satışları CASE ifadesiyle koşullu olarak birleştirip SQL Server PIVOT örneğiyle aynı çıktıyı elde eder.
-- Select Date and pivoted columns for each product
SELECT
Date,
-- Use CASE to create a column for Laptop and Mouse sales
SUM(CASE WHEN Product = 'Laptop' THEN Sales ELSE 0 END) AS Laptop,
SUM(CASE WHEN Product = 'Mouse' THEN Sales ELSE 0 END) AS Mouse
FROM SalesData
GROUP BY Date;
Oracle
Oracle, satırların sütunlara doğrudan dönüştürülmesine olanak tanıyan PIVOT işleçini destekler. SQL Server’da olduğu gibi, dönüştürülecek sütunları açıkça belirtmeniz gerekir.
Aşağıdaki sorguda, PIVOT işleci ProductName değerlerini sütunlara dönüştürür ve SalesAmount’ı SUM işleciyle birleştirir.
SELECT *
FROM (
-- Source data selection
SELECT SaleDate, ProductName, SaleAmount FROM SalesData
)
PIVOT (
-- Aggregate Sales by Product, creating pivoted columns
SUM(SaleAmount)
FOR ProductName IN ('Laptop' AS Laptop, 'Mouse' AS Mouse)
);

Oracle’da SQL PIVOT işleci kullanılarak elde edilen çıktı dönüşümü örneği. Görsel: Yazar.
SQL’de Satırları Sütunlara Döndürme için İleri Teknikler
Satırları sütunlara döndürmeye yönelik ileri teknikler, karmaşık verileri esnek şekilde ele almanız gerektiğinde faydalıdır. Dinamik teknikler ve birden fazla sütunu aynı anda ele alma, statik pivotlamanın sınırlı kaldığı durumlarda dönüşüm yapmanıza olanak tanır. Bu iki yöntemi ayrıntılı inceleyelim.
Dinamik pivotlar
Dinamik pivotlar, verideki değişikliklere otomatik uyum sağlayan pivot sorguları oluşturmanıza olanak tanır. Bu teknik, ürün adları veya kategoriler gibi sık değişen sütunlarınız olduğunda ve sorgunuzun yeni girdileri manuel güncelleme yapmadan otomatik olarak dahil etmesini istediğinizde özellikle yararlıdır.
Bir SalesData tablomuz olduğunu ve yeni ürünler eklense bile uyum sağlayacak dinamik bir pivot oluşturabildiğimizi varsayalım. Aşağıdaki sorguda @columns pivotlanacak sütun listesini dinamik olarak oluşturur ve sp_executesql üretilen SQL’i çalıştırır.
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
-- Step 1: Generate a list of distinct products to pivot
SELECT @columns = STRING_AGG(QUOTENAME(Product), ', ')
FROM (SELECT DISTINCT Product FROM SalesData) AS products;
-- Step 2: Build the dynamic SQL query
SET @sql = N'
SELECT Date, ' + @columns + '
FROM
(SELECT Date, Product, Sales FROM SalesData) AS source
PIVOT
(
SUM(Sales)
FOR Product IN (' + @columns + ')
) AS pivot_table;';
-- Step 3: Execute the dynamic SQL
EXEC sp_executesql @sql;
Birden fazla sütunu ele alma
Aynı anda birden fazla sütunu pivotlamanız gereken senaryolarda, aynı sorguda birden fazla sütun üretmek için PIVOT işleci ve ek özetleme tekniklerini kullanırsınız.
Aşağıdaki örnekte, Sales ve Quantity sütunlarını Product bazında pivotladım.
-- Pivot Sales and Quantity for Laptop and Mouse by Date
SELECT
p1.Date,
p1.[Laptop] AS Laptop_Sales,
p2.[Laptop] AS Laptop_Quantity,
p1.[Mouse] AS Mouse_Sales,
p2.[Mouse] AS Mouse_Quantity
FROM
(
-- Pivot for Sales
SELECT Date, [Laptop], [Mouse]
FROM
(SELECT Date, Product, Sales FROM SalesData) AS source
PIVOT
(SUM(Sales) FOR Product IN ([Laptop], [Mouse])) AS pivot_sales
) p1
JOIN
(
-- Pivot for Quantity
SELECT Date, [Laptop], [Mouse]
FROM
(SELECT Date, Product, Quantity FROM SalesData) AS source
PIVOT
(SUM(Quantity) FOR Product IN ([Laptop], [Mouse])) AS pivot_quantity
) p2
ON p1.Date = p2.Date;

SQL PIVOT işleci kullanılarak birden fazla sütunun dönüştürülmesi örneği. Görsel: Yazar.
Birden fazla sütunu pivotlamak, öğe başına birden fazla niteliği döndürerek daha ayrıntılı raporlar ve daha zengin içgörüler sağlar. Ancak, çok sayıda sütun varsa sözdizimi karmaşık olabilir. Dinamik pivot teknikleriyle birleştirilmediği sürece sabitleme gerekebilir; bu da ek karmaşıklık ekler.
Sonuç
Satırları sütunlara döndürmek, öğrenmeye değer bir SQL tekniğidir. Kullanıcı bağlılığını zaman içinde izleyebileceğiniz kohort tutundurma tabloları oluşturmada SQL pivot tekniklerinin kullanıldığını gördüm. Ayrıca, her satırın bir katılımcıyı temsil ettiği ve her sorunun kendi sütununa pivotlanabildiği anket verilerini analiz ederken de bu tekniklerin kullanıldığına tanık oldum.
SQL’de Raporlama kursumuz, verileri özetleme ve sunuma ve/veya gösterge paneli oluşturmaya hazırlama hakkında daha fazla bilgi edinmek istiyorsanız harika bir seçenektir. SQL’de Associate Data Analyst ve SQL’de Associate Data Engineer kariyer yollarımız da diğer iyi seçeneklerdir; özgeçmişinize çok şey katarlar, bu yüzden bugün kaydolun.
SQL’de Satırları Sütunlara Döndürürken Sık Sorulan Sorular
SQL’de pivotlama nedir?
SQL’de pivotlama, daha iyi veri görselleştirme ve raporlama için satırların sütunlara dönüştürülmesi ve verinin özetlenmesi anlamına gelir.
PIVOT ve UNPIVOT arasındaki fark nedir?
PIVOT satırları sütunlara dönüştürürken, UNPIVOT sütunları tekrar satırlara dönüştürür. Bu işlemler birbirinin tersidir.
Tüm SQL veritabanları PIVOT işleci destekler mi?
Hayır. SQL Server ve Oracle yerleşik PIVOT işlevselliğine sahipken, MySQL ve PostgreSQL’de yoktur. PIVOT işleci olmayan veritabanlarında yaygın olarak CASE gibi manuel teknikler kullanılır.
Pivotlama sorgu performansını etkiler mi?
Evet, özellikle büyük veri kümelerinde. Pivotlama genellikle özetlemeleri içerir ve veri boyutu ile pivotlanan sütun sayısına bağlı olarak ek kaynak gerektirebilir.
Aynı anda birden fazla sütunu pivotlayabilir miyim?
Evet, ancak çoğu veritabanı ek adımlar gerektirir; örneğin birden çok pivot veya farklı özetlemelerin sonuçlarını birleştirme.
