Setelah melalui beberapa studi kasus, Dzaky mendapatkan tabel seperti ini
Tabel Uraian
Tabel Transaksi
| pk | uraian | kode |
|---|---|---|
| 1 | Makan siang | K |
| 2 | Makan malam | K |
| 3 | Beli rokok | K |
| 4 | Makan Sate | K |
| 5 | Sarapan Pagi | K |
| 6 | Honor | M |
Tabel Transaksi
| tanggal | pk | jumlah |
|---|---|---|
| 2012-02-01 | 1 | 15000 |
| 2012-02-01 | 2 | 12500 |
| 2012-02-01 | 3 | 10000 |
| 2012-02-01 | 4 | 25000 |
| 2012-02-02 | 5 | 5000 |
| 2012-02-02 | 1 | 12500 |
| 2012-02-02 | 2 | 20000 |
| 2012-02-02 | 3 | 10000 |
| 2012-01-31 | 6 | 750000 |
| 2012-02-05 | 6 | 500000 |
| 2012-04-03 | 3 | 25000 |
| 2012-04-03 | 4 | 40000 |
| 2012-04-03 | 3 | 25000 |
| 2012-04-03 | 4 | 40000 |
| 2012-04-03 | 3 | 25000 |
| 2012-04-03 | 4 | 40000 |
| 2012-04-03 | 3 | 25000 |
| 2012-04-03 | 4 | 40000 |
| 2012-04-19 | 2 | 2460 |
Untuk mendapatkan kembali informasi lengkap dari kedua tabel, dilakukan dengan klausa JOIN.
SELECT t.tanggal, u.uraian, u.kode, t.jumlah
FROM transaksi t JOIN ( turai u )
WHERE t.pk = u.pk; dan hasilnya bisa dilihat disini
| tanggal | uraian | kode | Jumlah |
|---|---|---|---|
| 2012-02-01 | Makan siang | K | 15000 |
| 2012-02-02 | Makan siang | K | 12500 |
| 2012-02-01 | Makan malam | K | 12500 |
| 2012-02-02 | Makan malam | K | 20000 |
| 2012-04-19 | Makan malam | K | 2460 |
| 2012-02-01 | Beli rokok | K | 10000 |
| 2012-02-02 | Beli rokok | K | 10000 |
| 2012-04-03 | Beli rokok | K | 25000 |
| 2012-04-03 | Beli rokok | K | 25000 |
| 2012-04-03 | Beli rokok | K | 25000 |
| 2012-04-03 | Beli rokok | K | 25000 |
| 2012-02-01 | Makan Sate | K | 25000 |
| 2012-04-03 | Makan Sate | K | 40000 |
| 2012-04-03 | Makan Sate | K | 40000 |
| 2012-04-03 | Makan Sate | K | 40000 |
| 2012-04-03 | Makan Sate | K | 40000 |
| 2012-02-02 | Sarapan Pagi | K | 5000 |
| 2012-01-31 | Honor | M | 750000 |
| 2012-02-05 | Honor | M | 500000 |
Akan semakin menarik bila informasi yang disajikan lebih simple, misal sudah berapa banyak uang yang digunakan untuk setiap uraian. Untuk itu diperlukan klausa group dan fungsi agregat sum.
SELECT t.tanggal, u.uraian, u.kode,
sum(t.jumlah) as jumlah
FROM transaksi t JOIN ( turai u )
WHERE t.pk = u.pk
GROUP BY u.uraian
dan hasilnya bisa dilihat disini
| tanggal | uraian | kode | Jumlah |
|---|---|---|---|
| 2012-02-01 | Beli rokok | K | 120000 |
| 2012-01-31 | Honor | M | 1250000 |
| 2012-02-01 | Makan malam | K | 34960 |
| 2012-02-01 | Makan Sate | K | 185000 |
| 2012-02-01 | Makan siang | K | 27500 |
| 2012-02-02 | Sarapan Pagi | K | 5000 |
Sudah kelihatan lebih informatif. Apa lagi? Masih ada, dari kode yang ada menyatakan M[asuk] dan K[keluar]. Bagaimana kalau untuk uang keluar ditandai dengan negatif?
SELECT t.tanggal, u.uraian,
SUM(IF(kode='K',-t.jumlah,t.jumlah)) AS JUMLAH
FROM transaksi t JOIN ( turai u )
WHERE t.pk = u.pk
GROUP BY uraiandan hasilnya bisa dilihat disini
| tanggal | uraian | Jumlah |
|---|---|---|
| 2012-02-01 | Beli rokok | -120000 |
| 2012-01-31 | Honor | 1250000 |
| 2012-02-01 | Makan malam | -34960 |
| 2012-02-01 | Makan Sate | -185000 |
| 2012-02-01 | Makan siang | -27500 |
| 2012-02-02 | Sarapan Pagi | -5000 |
Ah..ha sudah semakin menarik informasinya. Oh iya, berapa sisa uang ayah? Jangan-jangan....
SELECT t.tanggal , IFNULL(u.uraian,'TOTAL') AS URAIAN,
SUM(IF(kode='K',-t.jumlah,t.jumlah)) AS JUMLAH
FROM transaksi t JOIN ( turai u )
WHERE t.pk = u.pk
GROUP BY uraian with ROLLUP
dan hasilnya bisa dilihat disini
| tanggal | uraian | Jumlah |
|---|---|---|
| 2012-02-01 | Beli rokok | -120000 |
| 2012-01-31 | Honor | 1250000 |
| 2012-02-01 | Makan malam | -34960 |
| 2012-04-03 | Makan Sate | -185000 |
| 2012-02-01 | Makan siang | -27500 |
| 2012-02-02 | Sarapan Pagi | -5000 |
| 2012-02-02 | TOTAL | 877540 |
Ho..ho.. semakin asyik saja. Sekarang Dzaky mau kelompokkan berdasarkan uang yang masuk dan uang yang keluar serta selisihnya.
SELECT IF(u.kode='K','Uang Keluar',
IF(u.kode='M','Uang Masuk','SELISIH')) AS KETERANGAN,
SUM(IF(kode='K',-t.jumlah,t.jumlah)) AS JUMLAH
FROM transaksi t JOIN ( turai u )
WHERE t.pk = u.pk
GROUP BY u.kode with rollupdan hasilnya bisa dilihat disini
| Keterangan | Jumlah |
|---|---|
| Uang Keluar | -372460 |
| Uang Masuk | 1250000 |
| SELISIH | 877540 |
Oke..oke.. bagaimana dengan pivot atau cross-tab?


