Pivot adalah memutar, jadi kalo pivot tabel berarti memutar tabel. Jika kita punya data dalam satu kolom dan akan dijadikan kolom tersendiri, berarti kita perlu memutar tabel ini. Pivot tabel dapat dilakukan dengan bantuan fungsi decode.
Tak perlu panjang lebar, kita langsung ke contoh saja. Misalnya kita punya tabel seperti berikut :
Tak perlu panjang lebar, kita langsung ke contoh saja. Misalnya kita punya tabel seperti berikut :
kita akan menampilkannya dengan cara mengelompokkan pembayaran perbulan pada kolom sendiri, seperti berikut ini :
NAMA | JAN | FEB | MAR | APR | MEI | JUN | JUL | AGT | SEP | OKT | NOP | DES
Untuk mengelompokkan semua pembayaran pada kolom bulan tersendiri maka kita perlu mengubah bulan tertentu dengan kolom pembayaran.
select nama, sum(decode(bulan,1,bayar,0)) jan,
sum(decode(bulan,2,bayar,0)) feb,
sum(decode(bulan,3,bayar,0)) mar,
sum(decode(bulan,4,bayar,0)) apr,
sum(decode(bulan,5,bayar,0)) mei,
sum(decode(bulan,6,bayar,0)) jun,
sum(decode(bulan,7,bayar,0)) jul,
sum(decode(bulan,8,bayar,0)) agt,
sum(decode(bulan,9,bayar,0)) sep,
sum(decode(bulan,10,bayar,0)) okt,
sum(decode(bulan,11,bayar,0)) nop,
sum(decode(bulan,12,bayar,0)) des
from tabel_1
group by nama
Penjelasan :
sum(decode(bulan,1,bayar,0)) Jan, maksudnya sistem akan mencari data bulan 1 dan mengubahnya menjadi data pembayaran, yang bulan lain akan diubah menjadi nol. kemudian menjumlahkannya, nama kolom diubah menjadi JAN.
Filter
Jika hanya butuh data pembayaran hanya tiga bulan, sebaiknya harus difilter dengan perintah where bulan in (1,2,3). Tujuannya, agar data yang keluar adalah nama-nama yang mempunyai data pembayaran di bulan itu saja. Jika tidak difilter, seluruh nama yang ada dalam tabel_1 akan tampil, nama-nama yang tidak mempunyai pembayaran dibulan Januari, Februari, dan Maret akan terisi nol.
Menjumlahkan data pembayaran dalam setahun
Bagaimana cara menambah kolom jumlah? kita modifikasi script-nya menjadi bertingkat seperti berikut ini :
select nama,jan,feb,mar,apr,mei,jun,jul,agt,sep,okt,nop,des,
jan+feb+mar+apr+mei+jun+jul+agt+sep+okt+nop+des jumlah
from tabel_1,
(select noreg reg,sum(decode(bulan,1,bayar,0)) jan,
sum(decode(bulan,2,bayar,0)) feb,
sum(decode(bulan,3,bayar,0)) mar,
sum(decode(bulan,4,bayar,0)) apr,
sum(decode(bulan,5,bayar,0)) mei,
sum(decode(bulan,6,bayar,0)) jun,
sum(decode(bulan,7,bayar,0)) jul,
sum(decode(bulan,8,bayar,0)) agt,
sum(decode(bulan,9,bayar,0)) sep,
sum(decode(bulan,10,bayar,0)) okt,
sum(decode(bulan,11,bayar,0)) nop,
sum(decode(bulan,12,bayar,0)) des
from tabel_1
group by noreg) a
where noreg=a.reg
Perintah select dalam select digunakan untuk menyederhanakan script, bisa dibayangkan seperti apa panjangnya script diatas jika kita tidak mengelompokkan pembayaran tiap bulan dan mengubah nama kolomnya.