News Real

Loading...

Cross Tab Menggunakan My SQL

Langsung ajah

misalnya ada tabel:

tabel: presensi
nama | tanggal | kehadiran
——————————–
fulan | 2010-04-01 | hadir
fulin | 2010-04-01 | hadir
fulan | 2010-04-02 | hadir
fulin | 2010-04-02 | tidak hadir

sebagai pemanasan, dengan memberikan query:
select nama, group_concat(distinct kehadiran) as status_kehadiran from presensi group by nama
maka akan muncul:
nama | status_kehadiran
————————–
fulan | hadir
fulin | hadir, tidak hadir
terus, bagaimana cara membuat jumlah kehadirannya?
nama | hadir | tidak hadir
—————————
fulan | 2 | 0
fulin | 1 | 1

di sini, kita akan menggunakan concat, group_concat dan prepared statement. akan tetapi, kita siapkan dulu, nanti kira-kira querynya seperti apa.

target:
select nama, sum(if(kehadiran=’hadir’,1,0)) as `hadir`, sum(if(kehadiran=’tidak hadir’),1,0) as `tidak hadir` from presensi group by nama
kalau diperhatikan, ada beberapa sintaks yang diulang beberapa kali, yaitu:
sum(if(kehadiran=’x',1,0)) as `x` , dengan x adalah keterangannya (hadir atau tidak hadir)
sehingga, sql di atas terpecah ke dalam 3 bagian yang nantinya akan digabung menggunakan concat(), yaitu:
bagian 1: select nama,
bagian 2: sum(if(kehadiran=’x',1,0)) as `x` –> menggunakan group concat
bagian 3: from presensi group by nama
bagian 2 sendiri dibagi ke dalam 5 bagian, yaitu:
bagian 2.1: sum(if(kehadiran=’
bagian 2.2: x
bagian 2.3: ‘,1,0)) as `
bagian 2.4: x
bagian 2.5: `
sehingga, syntaxnya berubah menjadi:
select @crosstab := concat(“select nama,”, group_concat(distinct concat(“sum(if(kehadiran=’”, kehadiran, “‘,1,0)) as `”, kehadiran,”`”) separator “,”), ” from presensi group by nama”) from presensi
prepare rekap_presensi from @crosstab
execute rekap_presensi
jika sudah selesai, eksekusi
deallocate prepare rekap_presensi

Nonton TV Online

sms lucu

Dapatkan hadiah langsung UANG SETIAP HARI dari PEPSI. Caranya mudah, kumpulkan 10 tutup botol PEPSI, pasang pada sebatang kayu, lalu goyang-goyangkan di Lampu Merah teredekat