Dear Rudi,
  Thanks, scriptnya ok bngt...
  utk id yang 1 sdh benar,sdang utk yang id =2,
   
  ID C PREMIUM
------------ --- - ------------ ---
2 A 1000
2 B 700
2 C 300
2 D 1500
   
  ID AMT_BAYAR DATE_BYR
------------ --- ------------ --- ---------
2 1000 01-JAN-08
2 100 02-JAN-08
2 300 03-JAN-08
2 200 04-JAN-08
2 300 05-JAN-08
2 500 06-JAN-08
2 800 07-JAN-08
2 200 08-JAN-08
2 100 09-JAN-08
   
  insert calc mjd :
ID DATE_BYR C AMT
  2  01-JAN-08   A 1000
  2  02-JAN-08   B   100
  2  03-JAN-08   B   300
  2  04-JAN-08   B   200 
  2  05-JAN-08   B   100
  2  05-JAN-08   C   200
  2  06-JAN-08   C   100
  2  06-JAN-08   D   400
  2  07-JAN-08   D   800 
2  08-JAN-08   D   200 
2  09-JAN-08   D   100 
   
  so, dr cover table, dihabiskan dulu dari cover yg plng atas,kebawah per id 
(dihabiskan dulu amount cover A, lalu B,C & D) order by rownum
  gmn yach scrptnya??
   
  tx
rudi kristanto <[EMAIL PROTECTED]> wrote:
          [EMAIL PROTECTED]> create table cover (
2 id integer,
3 cover varchar2(1),
4 premium number(5)
5 );

Table created.

[EMAIL PROTECTED]> create table bayar (
2 id integer,
3 amt_bayar number(5),
4 date_byr date
5 );

Table created.

[EMAIL PROTECTED]> create table calc (
2 id integer,
3 date_byr date,
4 cover varchar2(1),
5 amt number(5)
6 );

Table created.

[EMAIL PROTECTED]> insert into cover values (1,'A',1000);

1 row created.

[EMAIL PROTECTED]> insert into cover values (1,'B',500);

1 row created.

[EMAIL PROTECTED]> insert into cover values (2,'A',1000);

1 row created.

[EMAIL PROTECTED]> insert into cover values (2,'B',700);

1 row created.

[EMAIL PROTECTED]> insert into cover values (2,'C',300);

1 row created.

[EMAIL PROTECTED]> insert into cover values (2,'D',1500);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(1,1200,sysdate-10);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(1,300,sysdate-9);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,1000,sysdate-10);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,100,sysdate-9);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,300,sysdate-8);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,200,sysdate-7);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,300,sysdate-6);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,500,sysdate-5);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,800,sysdate-4);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,200,sysdate-3);

1 row created.

[EMAIL PROTECTED]> insert into bayar values
(2,100,sysdate-2);

1 row created.

[EMAIL PROTECTED]> commit;

Commit complete.

[EMAIL PROTECTED]> select * from cover order by 1,2;

ID C PREMIUM
--------------- - ---------------
1 A 1000
1 B 500
2 A 1000
2 B 700
2 C 300
2 D 1500

6 rows selected.

[EMAIL PROTECTED]> select * from bayar order by 1,3;

ID AMT_BAYAR DATE_BYR
--------------- --------------- ---------
1 1200 01-JAN-08
1 300 02-JAN-08
2 1000 01-JAN-08
2 100 02-JAN-08
2 300 03-JAN-08
2 200 04-JAN-08
2 300 05-JAN-08
2 500 06-JAN-08
2 800 07-JAN-08
2 200 08-JAN-08
2 100 09-JAN-08

11 rows selected.

[EMAIL PROTECTED]> select * from calc;

no rows selected

[EMAIL PROTECTED]> edit hitung.sql

[EMAIL PROTECTED]> @hitung
Enter value for id: 1
old 29: 
where id = &id
new 29: 
where id = 1

3 rows created.

[EMAIL PROTECTED]> @hitung
Enter value for id: 2
old 29: 
where id = &id
new 29: 
where id = 2

11 rows created.

[EMAIL PROTECTED]> l
1 insert into calc
2 select e.* from
3 (
4 select id, date_byr, cover,
5 hasil-nvl(lag(hasil) over (partition by
cover order by rn),0) amt
6 from
7 (
8 select rn, id, date_byr, cover,
9 case when amt_cum >= prem_cum then
premium
10 else
decode(sign(premium-(prem_cum-amt_cum)),-1,0,premium-(prem_cum-amt_cum))
11 end hasil
12 from
13 (
14 select b.*,
15 sum(amt_real) over (order by rn)
amt_cum,
16 sum(premium) over (partition by gid
order by rn) prem_cum
17 from
18 (
19 select rownum rn, a.*
20 from
21 (
22 select b.gid, b.id, b.amt_bayar,
b.date_byr, a.cover, a.premium,
23 case when b.gid = lag(b.gid)
over (order by b.gid)
24 then 0
25 else amt_bayar
26 end amt_real
27 from cover a,
28 (select i.*, rownum gid from
(select * from bayar
29 
where id = &id
30 
order by date_byr, amt_bayar desc) i) b
31 where a.id = b.id
32 order by b.gid, a.premium desc
33 ) a
34 ) b
35 ) c
36 ) d
37 ) e
38 where e.amt > 0
39* order by date_byr, cover
[EMAIL PROTECTED]> select * from calc where id = 1;

ID DATE_BYR C AMT
--------------- --------- - ---------------
1 01-JAN-08 A 1000
1 01-JAN-08 B 200
1 02-JAN-08 B 300

3 rows selected.

[EMAIL PROTECTED]> select * from calc where id = 2;

ID DATE_BYR C AMT
--------------- --------- - ---------------
2 01-JAN-08 D 1000
2 02-JAN-08 D 100
2 03-JAN-08 D 300
2 04-JAN-08 A 100
2 04-JAN-08 D 100
2 05-JAN-08 A 300
2 06-JAN-08 A 500
2 07-JAN-08 A 100
2 07-JAN-08 B 700
2 08-JAN-08 C 200
2 09-JAN-08 C 100

11 rows selected.

[EMAIL PROTECTED]> spool off;

--- risti <[EMAIL PROTECTED]> wrote:

> Temans, sy ada problem utk memecah data insert ke
> suatu table,
> sample casenya spt ini :
> 
> cover table
> id Cover Premium
> 1 A 1000
> 1 B 500
> 
> Bayar table
> ID Amt_bayar date_byr
> 1 1200 01-Jan-07
> 1 300 02-Jan-07
> 
> insert ke calc table jadi spt ini :
> Cover amt date_byr
> A 1000 01-Jan-07
> B 200 01-Jan-07
> B 300 02-Jan-07
> 
> gimana ya ngakalinnya?? jadi akan cek berapa
> amount covernya per cover, dan amount di table bayar
> akan dipecah2 sesuai maksimal dari amount di table
> bayar...
> 
> thanks ya sblmnya
> 
> 
> ---------------------------------
> Never miss a thing. Make Yahoo your homepage.
> 
> [Non-text portions of this message have been
> removed]
> 
> 

Send instant messages to your online friends http://uk.messenger.yahoo.com 


                         

       
---------------------------------
Looking for last minute shopping deals?  Find them fast with Yahoo! Search.

[Non-text portions of this message have been removed]

Kirim email ke