create view komponen_gaji_v as 
// Gaji Pokok
select gj.id ID, p.nip_pns NIP, p.objectdetailkategorypegawaifk KategoriPegawai, p.namalengkap NamaLengkap, gp.golonganpegawai Golongan, pdk.Pendidikan Pendidikan, date_part('year', now()) - date_part('year', p.tglmasuk) MasaKerja, kh.id IdKomponenGaji, kh.komponenharga KomponenGaji, gjmkp.hargasatuan Harga 
from pegawaiskgaji_m gj 
left join pegawai_m p on gj.objectpegawaifk=p.id 
left join golonganpegawai_m gp on p.ObjectGolonganPegawaiFk=gp.id 
left join pendidikan_m pdk on p.objectpendidikanterakhirfk=pdk.id 
left join komponenharga_m kh on gj.objectkomponenhargafk=kh.id 
left join pegawaistrukturgajibymakape_m gjmkp on gjmkp.kdkomponenhargafk=gj.objectkomponenhargafk 
where kh.komponenharga='Gaji Pokok' 
and gjmkp.kdpendidikanfk=p.objectpendidikanterakhirfk 
and gjmkp.kddetailkategorypegawaifk=p.objectdetailkategorypegawaifk // kategori pegawai (sample data invalid->returned row 0)
and gjmkp.kdrangemasakerjafk=(select r.id from range_m r where r.namarange='Range Masa Kerja' and date_part('year', now()) - date_part('year', p.tglmasuk) between r.rangemin and r.rangemax)

union 

// Tunjangan Fungsional
select distinct(gj.id) ID, p.nip_pns NIP, p.objectdetailkategorypegawaifk KategoriPegawai, p.namalengkap NamaLengkap, gp.golonganpegawai Golongan, pdk.Pendidikan Pedidikan, date_part('year', now()) - date_part('year', p.tglmasuk) MasaKerja, kh.id IdKomponenGaji, kh.komponenharga KomponenGaji, gjjp.hargasatuan Harga 
from pegawaiskgaji_m as gj 
left join pegawai_m p on gj.objectpegawaifk=p.id 
left join golonganpegawai_m gp on p.ObjectGolonganFk=gp.id 
left join pendidikan_m pdk on p.objectpendidikanterakhirfk=pdk.id 
left join komponenharga_m kh on gj.objectkomponenhargafk=kh.id 
left join pegawaistrukturgajibyjape_m gjjp on gjjp.kdkomponenhargafk=gj.objectkomponenhargafk 
where kh.komponenharga='Tunjangan Fungsional' 
and gjjp.kdpendidikan=p.objectpendidikanterakhirfk 
and gjjp.kdjabatanfk=p.objectjabatanfungsionalfk 

union 

// Tunjangan Bahaya Radiasi
select distinct(gj.id) ID, p.nip_pns NIP, p.objectdetailkategorypegawaifk KategoriPegawai, p.namalengkap, gp.golonganpegawai Golongan, pdk.Pendidikan, date_part('year', now()) - date_part('year', p.tglmasuk) MasaKerja, kh.id IdKomponenGaji, kh.komponenharga KomponenGaji, gjlj.hargasatuan as Harga 
from pegawaiskgaji_m gj 
left join pegawai_m p on gj.objectpegawaifk=p.id 
left join golonganpegawai_m gp on p.ObjectGolonganFk=gp.id
left join pendidikan_m pdk on p.objectpendidikanterakhirfk=pdk.id 
left join komponenharga_m kh on gj.objectkomponenhargafk=kh.id 
left join pegawaistrukturgajibyltja_m gjlj on gjlj.kdkomponenhargafk=gj.objectkomponenhargafk
where kh.komponenharga='Tunjangan Bahaya Radiasi' 
and gjlj.kdjabatanfk=p.objectjabatanInternalfk 
and gjlj.kdleveltingkatfk=p.leveltingkatfk;

// Gaji kotor
create view komponen_gaji_bruto_v as
select vg.id, vg.nip, vg.kategoripegawai, vg.namalengkap, vg.golongan, vg.pendidikan, vg.masakerja, kh.id IdKomponenGaji, kh.komponenharga KomponenGaji, 
(select sum(vbs.harga) from komponen_gaji_v vbs where vg.nip=vbs.nip group by vbs.nip) harga 
from komponen_gaji_v vg, komponenharga_m kh
where kh.id=78;

// Pajak
create view komponen_pajak_v as
select p.id ID, p.nip_pns NIP, p.objectdetailkategorypegawaifk KategoriPegawai, p.namalengkap NamaLengkap, gp.golonganpegawai Golongan, pdk.Pendidikan, date_part('year', now()) - date_part('year', p.tglmasuk) MasaKerja, 62 IdKomponenGaji, 'Persen Pajak' KomponenGaji, pj.persenpajak Harga 
from pegawaiskpajak_m pj 
left join pegawai_m p on pj.objectgolonganpegawaifk=p.objectgolonganpegawaifk 
left join golonganpegawai_m gp on p.objectgolonganpegawaifk=gp.id 
left join pendidikan_m pdk on p.objectpendidikanterakhirfk=pdk.id
left join komponenharga_m kh on pj.objectobjekpajakfk=kh.id;

// Tunjangan pajak
create view komponen_tunjangan_pajak_v as
select g.id, g.nip, g.kategoripegawai, g.namalengkap, g.golongan, g.pendidikan, g.masakerja, 62 IdKomponenGaji, 'Tunjangan Pajak' KomponenGaji, 
(select vp.harga/100 * gb.harga from komponen_pajak_v vp, komponen_gaji_bruto_v gb where vp.nip=gb.nip and g.nip=vp.nip) as harga 
from komponen_gaji_v g;

// Potongan pajak
create view komponen_potongan_pajak_v as
select g.id, g.nip, g.kategoripegawai, g.namalengkap, g.golongan, g.pendidikan, g.masakerja, 66 IdKomponenGaji, 'Potongan Pajak' KomponenGaji, 
(select vp.harga/100 * gb.harga from komponen_pajak_v vp, komponen_gaji_bruto_v gb where vp.nip=gb.nip and g.nip=vp.nip) as harga 
from komponen_gaji_v g;

// gaji bersih
create view komponen_gaji_bersih_v as 
select g.id, g.nip, g.kategoripegawai, g.namalengkap, g.golongan, g.pendidikan, g.masakerja, 0 IdKomponenGaji, 'Gaji Bersih' KomponenGaji, gb.harga - vpp.harga harga 
from komponen_gaji_v g, komponen_gaji_bruto_v gb, komponen_potongan_pajak_v vpp 
where g.nip=gb.nip and gb.nip = vpp.nip;

create view summary_gaji_v as
select * from komponen_gaji_v
union 
select * from komponen_gaji_bruto_v 
union 
select * from komponen_tunjangan_pajak_v 
union 
select * from komponen_potongan_pajak_v 
union 
select * from komponen_gaji_bersih_v;