Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

A slightly different running sum in a hierarchy query

529206Apr 20 2010 — edited Apr 21 2010
Hi,

I've got stuck with this problem since quite some time, so pls help:

I am basically trying to rollup/aggregate values from the lower level nodes to the upper level nodes in a hierarchy. But this aggregate is a bit different than a plain rollup of values.

create table ent_rel (parent number, child number, child_amount number);

insert into ent_rel
select null, 100, null from dual
union all select 100, 101, null from dual
union all select 101, 102, 20 from dual
union all select 102, 103, null from dual
union all select 103, 104, null from dual
union all select 104, 105, null from dual
union all select 105, 106, 40 from dual
union all select 106, 107, null from dual
union all select 107, 108, 20 from dual
union all select 107, 109, 10 from dual
union all select 101, 203, null from dual
union all select 203, 205, 50 from dual
union all select 205, 207, null from dual
union all select 207, 209, null from dual
union all select 209, 210, 10 from dual
;

commit;

select RPAD(' ', (LEVEL - 1) * 2, '-') || child child
,level
,child_amount
from ent_rel
start with parent is null
connect by prior child = parent

CHILD LEVEL CHILD_AMOUNT
--------------------------------- ------ -------------
100 1
--101 2
----102 3 20
------103 4
--------104 5
----------105 6
------------106 7 40
--------------107 8
----------------108 9 20
----------------109 9 10
----203 3
------205 4 50
--------207 5
----------209 6
------------210 7 10

Now, I need a SQL query or even a simple PL/SQL code to get the DESIRED_AMOUNT field as shown below:

Pls note that there might be many more parallel branches to a node, but I've kept it simple just to get the concept.

CHILD LEVEL CHILD_AMOUNT DESIRED_AMOUNT
--------------------------------- ------ ------------- --------------
100 1 70
--101 2 70
----102 3 20 20
------103 4 40
--------104 5 40
----------105 6 40
------------106 7 40 40
--------------107 8 30
----------------108 9 20 20
----------------109 9 10 10
----203 3 50
------205 4 50 50
--------207 5 10
----------209 6 10
------------210 7 10 10

Thanks a lot in advance.

thanks and regards,
Knl
This post has been answered by Frank Kulash on Apr 20 2010
Jump to Answer

Comments

Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on May 19 2010
Added on Apr 20 2010
3 comments
5,571 views