Pivot Unpivot MS SQL Server

Microsoft SQL Server memiliki fasilitas Pivot dan Unpivot Table, yang sangat berguna untuk mengelola table, metode ini biasanya saya gunakan dalam pembuatan rekap nilai yang nilainya sudah memiliki ketetapan khusus misalkan bulan yang terdiri atas nilai satu sampai dengan duabelas (1 sd 12) pada satu tahun. Tapi tidak menutup kemungkinan akan field yang nilainya belum ada ketetapan jadi sifatnya sangat dinamis sesuai dengan keperluan. Untuk memahami penggunaan Pivot dan Unpivot pada MS SQL Server perhatikan contoh dibawah ini.



  • Pivot
Digunakan untuk merubah nilai pada sebuah kolom menjadi beberapa kolom. 
langkah pertama buat dulu table pada MS SQL Server susunan table seperti dibawah ini :

CREATE TABLE sales (
   sal_kode varchar(4),
   sal_bln int,
   sal_omset int
)

setelah itu isikan dengan data

INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','1','20000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S002','2','35000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S003','1','22000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','2','22000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S003','2','20700')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','3','39000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S003','3','77000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S001','4','80000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S002','4','13000')
INSERT  INTO sales (sal_kode, sal_bln, sal_omset) VALUES ('S005','4','34500')

periksa kembali isian data yang tadi di olah dengan mengetikan perintah

SELECT  * FROM sales

terlihat data yang tampil seperti pada gambar dibawah ini :


sekarang dari data table sales di sql server  akan dibuat rekap omset perbulan dengan menggunakan metode PIVOT Table MS SQL Server.

SELECT  'Total Omset' AS TotalBulananSales, 
                         [1],[2],[3],[4]
FROM 
(SELECT sal_bln, sal_omset FROM sales) AS TabelSalesSumber
PIVOT
(
  SUM(sal_omset)
  FOR sal_bln 
  IN ([1],[2],[3],[4])
) AS PivotTabelSalesBulanan

hasilnya terlihat seperti ini :




Pada contoh diatas saya hanya membuat rekapan omset sales hanya sampai dengan bulan ke 4 jika ingin membuat sampai bulan 12 pada data satu tahun bisa langsung tambahkan saja pada field sampai 12, dan bisa juga  berdasarkan nilai pencarian  pada kode sales seperti contoh dibawah ini

SELECT  'Total Omset' AS TotalBulananSales, 
                     sal_kode,
                     [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]
FROM 
(SELECT sal_bln, sal_omset, sal_kode 
        FROM sales WHERE sal_kode='S002') AS TabelSalesSumber
PIVOT

  SUM(sal_omset)
  FOR sal_bln 
  IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
) AS PivotTabelSalesBulanan 

hasil akhir seperti ini



  • Unpivot
Digunakan untuk merubah kolom menjadi baris
Untuk memahami perintah unpivot, buat sebuah table seperti dibawah ini,

CREATE TABLE bulanansales (
sal_kode varchar(4),
sal_jan int,
sal_feb int,
sal_mar int,
sal_apr int,
sal_mei int,
sal_jun int,
sal_jul int,
sal_agt int,
sal_sep int,
sal_okt int,
sal_nov int,
sal_des int


setelah itu isikan datanya seperti isian sampai tampil seperti dibawah ini dengan mengetikan perintah

SELECT * FROM bulanansales




Berdasarkan dari table yang ditampilkan semisalkan ingin merubah kolom menjadi baris per kode sales maka perintahnya bisa menggunakan UNPIVOT secara lengkapnya :


SELECT sal_kode, bulan, totalpenjualan
FROM
    (SELECT sal_kode, sal_jan, sal_feb, sal_mar, sal_apr, sal_mei, sal_jun, 
                 sal_jul, sal_agt, sal_sep, sal_okt, sal_nov, sal_des
FROM bulanansales WHERE sal_kode='A001') P
UNPIVOT
(
  totalpenjualan FOR bulan IN 
     (
    sal_jan, sal_feb, sal_mar, sal_apr, sal_mei, sal_jun, 
    sal_jul, sal_agt, sal_sep, sal_okt, sal_nov, sal_des
)
) AS tableUnpivot

hasil yang ditampilkan seperti dibawah ini


Demikian penjelasan mengenai pivot dan unpivot di microsoft sql server, semoga bermanfaat bagi yang memerlukannya. mohon maaf jika terjadi kesalahan dalam penyampaian


EmoticonEmoticon