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語法這樣比較高效。

注意:

每次計算時需要先把原來父節點上面的數據清掉,再從末級匯總上來,要不然計算的結果會包含原來父節點的值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM