oracle树结构汇总(父级显示子集的合计)

 

我所做过的情况:

所有的数据都是存在末级节点上面的,然后查询的时候要求父节点要显示子集的合计

图一显示末级上面的数据

 

 

 

图二显示父节点的值  可以看出父级节点的值是子集的合计

 

 

 情况就是这样下面给出一个demo,在数据库执行以下就可以看出来该怎么做了

create table t

(id number,

parent_id number,

value number);

insert into t values(1,0,0);

insert into t values(2,1,0);

insert into t values(3,1,0);

insert into t values(4,2,100);

insert into t values(5,3,200);

commit;

select * from t order by id asc;

 

 关键语句:

with ttt as
(select t.*, SYS_CONNECT_BY_PATH(id, '/') || '/' path
from t
start with t.parent_id = 0
connect by prior t.id = t.parent_id)
SELECT id,
parent_id,
value,
(SELECT SUM(value) FROM ttt WHERE path like t1.path || '%') s_value
FROM ttt T1;

 

 

 

 

 

可以看出已经将所有的节点的数据都查出来了

接下就可以挑出父节点的数据,将他更新到父节点数据上,更新的时候可以使用merge into语法这样比较高效。

注意:

每次计算时需要先把原来父节点上面的数据清掉,再从末级汇总上来,要不然计算的结果会包含原来父节点的值

 

posted @ 2022-01-20 09:11  林间山下  阅读(1162)  评论(0编辑  收藏  举报