Lewati ke konten utama

Cara Menggunakan SQL PIVOT

Tingkatkan keterampilan SQL Anda dengan operator SQL PIVOT. Pelajari cara mengonversi baris menjadi kolom untuk membuat pivot table di SQL Server dan Oracle.
Diperbarui 5 Jun 2026  · 10 mnt baca

Operator PIVOT di SQL Server dan Oracle adalah teknik yang sangat berguna untuk mengubah baris tabel menjadi kolom. Operator PIVOT tidak hanya meningkatkan keterbacaan dan interpretasi hasil kueri, tetapi juga memudahkan memahami tren data dengan menggunakan agregasi untuk membuat pivot table atau crosstab. Pivot table ini sangat membantu dalam laporan yang memerlukan visualisasi yang baik.

Sebelum mulai, saya menyarankan Anda mengecek jalur keterampilan DataCamp SQL Fundamentals jika Anda merasa kemampuan SQL Anda sudah berkarat. Jalur keterampilan SQL Fundamentals kami akan membantu Anda memahami cara menggabungkan dan memanipulasi data, serta menggunakan subquery dan window function.

Jawaban Singkat: Cara Melakukan Pivot di SQL

Operator PIVOT di SQL Server berguna saat meringkas data karena memungkinkan transformasi baris menjadi kolom. Perhatikan tabel city_sales di bawah ini, yang menunjukkan penjualan umum suatu produk di lima kota besar AS.

Contoh tabel untuk ditransformasikan menggunakan SQL PIVOT

Contoh tabel untuk ditransformasikan menggunakan SQL PIVOT. Gambar oleh Penulis.

Kita akan menggunakan kueri berikut, yang memakai operator PIVOT, untuk memutar beberapa kolom pada tabel di atas.

-- Select the columns for the output: city and sales data for 2019, 2020, and 2021
SELECT 
    city,
    [2019] AS Sales_2019,
    [2020] AS Sales_2020,
    [2021] AS Sales_2021
FROM
    (
        -- Subquery to select city, year, and sales from city_sales table
        SELECT city, year, sales 
        FROM city_sales
    ) AS src
PIVOT
(
    -- Pivot the sales data to have years as columns and sum the sales for each year
    SUM(sales)
    FOR year IN ([2019], [2020], [2021])
) AS pvt;

Contoh keluaran transformasi menggunakan SQL PIVOT

Contoh keluaran transformasi menggunakan SQL PIVOT. Gambar oleh Penulis.

Apa itu PIVOT dalam SQL

Pivot adalah teknik dalam SQL yang digunakan untuk mengubah baris menjadi kolom pada data tabel. Di SQL Server dan Oracle, pivot dilakukan dengan operator PIVOT. Sintaks operator SQL PIVOT, seperti ditunjukkan di bawah, memiliki tiga bagian utama:

  • SELECT: Pernyataan SELECT merujuk kolom yang akan dikembalikan dalam pivot table SQL.

  • Subquery: Subquery berisi sumber data atau tabel yang akan disertakan dalam pivot table SQL.

  • PIVOT: Operator PIVOT berisi agregasi dan filter yang akan diterapkan pada pivot table.

-- Select the non-pivoted column and the pivoted columns with aliases
SELECT 
    [non-pivoted column],               
    [first pivoted column] AS [column name],   
    [second pivoted column] AS [column name],  
    ...
FROM
    (
        -- Subquery to select the necessary columns from the source table
        SELECT [columns] 
        FROM [source_table]
    ) AS source_table
PIVOT
(
    -- Pivot operation to aggregate data and transform rows into columns
    [aggregate_function]([pivot_column])        
    FOR [pivot_column] IN ([first pivoted column], [second pivoted column], ...) 
) AS pivot_table; -- Alias for the result of the pivot operation

Implementasi Spesifik Basis Data untuk SQL PIVOT

Basis data SQL Server dan Oracle mendukung langsung operator PIVOT. Namun, MySQL dan PostgreSQL memiliki metode alternatif untuk membuat pivot table dalam SQL.

PIVOT di SQL Server

SQL Server menyediakan dukungan native untuk operator PIVOT. Di sini, kita akan menggunakan operator PIVOT untuk mengubah baris menjadi kolom dan meringkas data menggunakan fungsi agregat seperti SUM(). Kita juga akan menggunakan klausa SQL seperti WHERE, GROUP BY, dan ORDER BY untuk manipulasi data yang lebih terarah.

Contoh di bawah menunjukkan cara menggunakan operator PIVOT untuk memfilter data untuk tahun 2020 atau lebih baru (WHERE), mengelompokkan data berdasarkan kota dan tahun (GROUP BY), serta mengurutkan data berdasarkan kota (ORDER BY):

-- Select the city and sales data for the years 2019, 2020, and 2021
SELECT 
    city,                         
    [2019] AS Sales_2019,             
    [2020] AS Sales_2020,           
    [2021] AS Sales_2021              
FROM
    (
        -- Subquery to select city, year, and sales from the city_sales table
        SELECT city, year, sales 
        FROM city_sales
        WHERE year >= 2020 -- filtering
        GROUP BY city, year, sales -- grouping
    ) AS src                   
PIVOT
(
    -- Pivot the sales data to have years as columns, averaging the sales over each year
    SUM(sales) -- aggregating
    FOR year IN ([2019], [2020], [2021]) 
) AS pvt;         

Contoh keluaran tabel yang ditransformasikan menggunakan SQL PIVOT dengan klausa WHERE, GROUP BY, dan ORDER BY

Contoh keluaran tabel yang ditransformasikan menggunakan SQL PIVOT dengan klausa umum. Gambar oleh Penulis.

PIVOT di Oracle

Mirip dengan SQL Server, Oracle juga menggunakan operator PIVOT untuk mengubah baris menjadi kolom. Namun, sintaks operator PIVOT di database Oracle sedikit berbeda dari SQL Server. Kueri di bawah menunjukkan bagaimana operator PIVOT muncul di Oracle. Perhatikan bahwa kolom diberi alias di dalam operator PIVOT, tidak seperti pernyataan SELECT luar pada SQL Server.

-- Outer SELECT to choose all columns resulting from the PIVOT operation
SELECT *
FROM (
    -- Inner SELECT to retrieve the raw data of city, year, and sales
    SELECT city, year, sales
    FROM sales
)
-- PIVOT operation to convert rows to columns
PIVOT (
    SUM(sales) 
    -- Specify the year values to pivot and alias them as Sales_<year>
    FOR year IN (2019 AS Sales_2019, 2020 AS Sales_2020, 2021 AS Sales_2021)
)
ORDER BY city;

Pivot di MySQL

Basis data MySQL tidak mendukung operator SQL PIVOT. Untuk membuat pivot table di MySQL, Anda harus menggunakan pernyataan CASE dengan agregasi bersyarat. Sebagai contoh, kueri di bawah akan membuat pivot table untuk mengagregasikan data berdasarkan jumlah penjualan untuk berbagai tahun, dikelompokkan dan diurutkan menurut city.

-- Select the city and sum the sales data for the years 2019, 2020, and 2021
SELECT 
    city,
    SUM(CASE WHEN year = 2019 THEN sales ELSE 0 END) AS Sales_2019,
    SUM(CASE WHEN year = 2020 THEN sales ELSE 0 END) AS Sales_2020,
    SUM(CASE WHEN year = 2021 THEN sales ELSE 0 END) AS Sales_2021
FROM 
    city_sales 
GROUP BY 
    city
ORDER BY 
    city; 

Pivot di PostgreSQL

Basis data PostgreSQL juga tidak mendukung operator SQL PIVOT. Oleh karena itu, saat membuat pivot table, penting untuk menggunakan pernyataan CASE dengan agregasi bersyarat. Kueri di bawah adalah contoh pernyataan CASE bersyarat yang digunakan untuk membuat pivot table di PostgreSQL.

-- Select the city and sum the sales data for the years 2019, 2020, and 2021
SELECT 
    city,
    SUM(CASE WHEN year = 2019 THEN sales ELSE 0 END) AS Sales_2019, 
    SUM(CASE WHEN year = 2020 THEN sales ELSE 0 END) AS Sales_2020,
    SUM(CASE WHEN year = 2021 THEN sales ELSE 0 END) AS Sales_2021
FROM 
    city_sales
GROUP BY 
    city
ORDER BY 
    city; 

Teknik Lanjutan dengan SQL PIVOT

Ada beberapa teknik pivot SQL tingkat lanjut untuk menulis kueri yang kompleks. Pada bagian ini, kita akan melihat dynamic pivoting, yang kita gunakan untuk membuat kueri pivot table saat kolom yang akan diputar belum diketahui. Metode ini menggunakan SQL untuk membuat pivot table saat runtime.

Dynamic PIVOT di SQL Server

Kueri di bawah menggunakan PIVOT untuk secara dinamis memutar kolom year di SQL Server. Kueri ini akan mengambil tahun-tahun unik dari tabel city_sales. Lalu akan membangun dan mengeksekusi kueri PIVOT dinamis menggunakan tahun-tahun yang diambil.

-- Declare variables to hold the column names and the dynamic query
DECLARE @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX);
-- Get distinct values of the year column and concatenate them into a string
SELECT @cols = STRING_AGG(QUOTENAME(year), ',') 
               FROM (SELECT DISTINCT year FROM city_sales) AS years;
-- Construct the dynamic PIVOT query
SET @query = '
SELECT city, ' + @cols + '
FROM
(
    -- Subquery to select city, year, and sales from the city_sales table
    SELECT city, year, sales
    FROM city_sales
) AS src
PIVOT
(
    -- Pivot the sales data to have years as columns, summing the sales for each year
    SUM(sales)
    FOR year IN (' + @cols + ')
) AS pvt
ORDER BY city';  -- Order the results by city
-- Execute the dynamic PIVOT query
EXEC sp_executesql @query;

Contoh keluaran tabel menggunakan SQL dynamic PIVOT

Contoh keluaran tabel menggunakan SQL dynamic PIVOT. Gambar oleh Penulis.

Dynamic PIVOT di Oracle

Di database Oracle, dynamic pivoting didukung dengan mengeksekusi kueri dinamis menggunakan pernyataan EXECUTE IMMEDIATE. Fungsi LISTAGG juga digunakan untuk secara dinamis mengagregasikan nama kolom dan tanda kutip tunggal ' ' yang digunakan dalam alias di dalam pivot.

DECLARE
    cols VARCHAR2(4000);
    sql_query VARCHAR2(4000);
BEGIN
    -- Get the list of years dynamically
    SELECT LISTAGG('''' || year || ''' AS ' || 'sales_' || year, ',') 
    INTO cols
    FROM (SELECT DISTINCT year FROM city_sales);
    -- Construct the dynamic SQL query
    sql_query := 'SELECT * FROM (
                      SELECT city, year, sales
                      FROM city_sales
                  )
                  PIVOT (
                      SUM(sales)
                      FOR year IN (' || cols || ')
                  )
                  ORDER BY city';
    -- Execute the dynamic SQL query
    EXECUTE IMMEDIATE sql_query;
END;

Dynamic Pivot di MySQL

MySQL tidak mendukung SQL dinamis secara langsung. Karena itu, Anda harus membuat stored procedure untuk PIVOT dinamis di MySQL. Kueri di bawah menunjukkan cara menggunakan stored procedure untuk membuat kueri PIVOT dinamis.

-- Declare variables to hold the dynamic columns (cols) and the final SQL query
DELIMITER $
CREATE PROCEDURE dynamic_pivot()
BEGIN
    DECLARE cols VARCHAR(1000);
    DECLARE sql_query VARCHAR(2000);
    -- Get the list of distinct years
    SELECT GROUP_CONCAT(DISTINCT
        CONCAT('SUM(CASE WHEN year = ', year, ' THEN sales ELSE 0 END) AS ', year, '')
    ) INTO cols
    FROM city_sales;
    -- Construct the dynamic SQL query
    SET sql_query = CONCAT('SELECT city, ', cols, ' FROM city_sales GROUP BY city ORDER BY city');
    -- Prepare and execute the SQL query
    PREPARE stmt FROM sql_query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END $
DELIMITER ;

Setelah membuat stored procedure, Anda harus memanggil stored procedure tersebut untuk mengeksekusi kueri PIVOT dinamis:

CALL dynamic_pivot();

Dynamic Pivot di PostgreSQL

Serupa, Anda dapat membuat PIVOT dinamis di PostgreSQL menggunakan kueri berikut:

-- Block declaration to execute PL/pgSQL code in an anonymous code block
DO
$
DECLARE
    cols text;  -- Variable to store the list of columns for the dynamic query
    query text; -- Variable to store the dynamic SQL query
BEGIN
    -- Get distinct years and construct the list of SUM(CASE...) statements
    SELECT STRING_AGG(DISTINCT 'SUM(CASE WHEN year = ' || year || ' THEN sales ELSE 0 END) AS "Sales_' || year || '"', ', ')
    INTO cols
    FROM city_sales;
    -- Construct the dynamic PIVOT query
    query := 'SELECT city, ' || cols || ' FROM city_sales GROUP BY city ORDER BY city';
    -- Execute the dynamic PIVOT query
    EXECUTE query;
END
$;

Kesimpulan dan Pembelajaran Lanjutan

Memahami cara menggunakan PIVOT dalam SQL penting jika Anda ingin mentransformasi dan menganalisis data secara efisien. Saat membuat pivot table di SQL, mempelajari beragam implementasi operator PIVOT pada berbagai basis data sangat krusial. Sebagai analis data, saya mendorong Anda untuk terus berlatih keterampilan SQL guna mempelajari bagaimana dan kapan menerapkan PIVOT untuk menganalisis berbagai dataset.

Jika Anda seorang calon analis data yang ingin menapaki industri ini atau analis berpengalaman, saya merekomendasikan untuk mengambil kursus DataCamp Introduction to SQL dan Intermediate SQL untuk meningkatkan keterampilan analisis data Anda. Saya juga merekomendasikan mengambil kursus Data Manipulation in SQL, yang mengajarkan subquery dan konsep lain yang dibahas dalam tutorial ini, bersama dengan kursus Introduction to SQL Server, yang membahas SQL Server secara khusus.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Penulis teknis Data Science dengan pengalaman langsung dalam analitik data, business intelligence, dan data science. Saya menulis konten praktis berfokus industri tentang SQL, Python, Power BI, Databricks, dan rekayasa data, yang berakar pada pekerjaan analitik dunia nyata. Tulisan saya menjembatani kedalaman teknis dan dampak bisnis, membantu para profesional mengubah data menjadi keputusan yang meyakinkan.

Pertanyaan yang Sering Diajukan

Apa itu SQL PIVOT?

Operator SQL PIVOT mengubah baris menjadi kolom dalam hasil kueri.

Basis data mana yang mendukung SQL PIVOT?

SQL Server dan Oracle menyediakan dukungan native untuk operator PIVOT. MySQL dan PostgreSQL membuat pivot table menggunakan agregasi dan pernyataan CASE.

Apa perbedaan PIVOT dan UNPIVOT?

Operator PIVOT digunakan untuk mengubah baris data menjadi kolom dengan melakukan agregasi agar lebih mudah dibaca. Klausa UNPIVOT digunakan untuk mengubah kolom menjadi baris.

Jika Anda menggunakan PIVOT dengan agregasi lalu UNPIVOT, apakah data kembali ke bentuk aslinya?

Tidak, menggunakan PIVOT dengan agregasi lalu menerapkan UNPIVOT umumnya bukan operasi kebalikan yang persis sama.

Dapatkah saya melakukan pivot data secara dinamis di SQL?

SQL Server dan PostgreSQL mendukung dynamic pivoting. MySQL memungkinkan dynamic pivoting menggunakan stored procedure.

Bisakah PIVOT digabungkan dengan klausa SQL?

Anda dapat menggabungkan operator PIVOT dengan klausa SQL untuk memfilter data, termasuk klausa WHERE, GROUP BY, dan ORDER BY.

Apakah cross tabulation sama dengan pivot table dalam SQL?

Ya, cross-tabulation (cross-tab) dan pivot table dalam SQL pada dasarnya adalah konsep yang sama. Keduanya digunakan untuk meringkas dan menata ulang data agar lebih mudah diakses.

Topik

Belajar SQL bersama DataCamp

Kursus

Intermediate SQL Server

4 Hr
65.6K
In this course, you will use T-SQL, the flavor of SQL used in Microsoft's SQL Server for data analysis.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak