Feeds:
Posts
Comments

Archive for March, 2009

Dear All readers,

Back again with “Ngitung Balance” … :mrgreen:

Pada postingan dulu, saya melakukan perhitungan balance dengan menggunakan fitur yang ada FastReport dan silahkan baca disini untuk balance FastReport.

Nah, sekarang bagaimana ngitung balance dengan menggunakan MySQL atau Single Simple Query ?

Setelah sekian waktu mencoba, mengutak – mengatik … dan akhirnya ketemu dengan simple.

Silahkan coba dengan membuat table seperti ini :

CREATE TABLE accountdeposit
(
  id INTEGER(11) NOT NULL AUTO_INCREMENT,
  memCode CHAR(9) COLLATE latin1_swedish_ci NOT NULL,
  transCode CHAR(100) COLLATE latin1_swedish_ci NOT NULL,
  stat ENUM('D','C') NOT NULL,
  balance FLOAT(9,3) NOT NULL,
  transDate TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP 
            DEFAULT CURRENT_TIMESTAMP,
  author INTEGER(11) NOT NULL, PRIMARY KEY (id),
  KEY memCode (memCode)
);
INSERT INTO accountdeposit (id, memCode, transCode, stat, balance, 
                            transDate, author) VALUES
(5, '0321001', 'Buka Account', 'C', 100000, '2009-03-21 00:05:44', 1),
(6, '0321001', 'open list 3 Form', 'D', 15000, '2009-03-23 10:51:16', 1),
(7, '0321001', 'open list 4 Form', 'C', 20000, '2009-03-23 13:05:00', 1);
COMMIT;

Nah, itu untuk struktur dan data nya … itu diatas mah sample doank ya … :mrgreen:

Sekarang bagaimana untuk retrieve agar mendapatkan seperti dibawah ini ?

+------------------+------------+------------+-------------+
| transCode        | Debit      | Credit     | LastBalance |
+------------------+------------+------------+-------------+
| Buka Account     |      0.000 | 100000.000 |  100000.000 |
| open list 3 Form | -15000.000 |      0.000 |   85000.000 |
| open list 4 form |      0.000 |  20000.000 |  105000.000 |
+------------------+------------+------------+-------------+

Nih dibawah sql scriptnya :

select transCode,
case when stat='D' then (-balance) else 0 end as Debit,
case when stat='C' then balance else 0 end as Credit,
(@LB := @LB + if (stat='D', -balance, balance)) as LastBalance
from (select @LB := 0) as LastBlnc, accountdeposit
where memCode = '0321001'
group by memcode, transdate
order by transdate;

Hasilnya ? ya seperti diatas …

Thanks to bro @yayaretina that has been open my mind to create a Simple Single Queries .. :mrgreen:

Cheers,
😎
Man’z

Advertisements

Read Full Post »