树状结构数据如何用sql进行处理

数据结构存储方式如下:
树状结构数据如何用sql进行处理
最底层节点存数据,如:4,8,9,6,12,13,11
父节点不存数。

根据以上结构建如下两张表:

HTEST表
ID:所有节点
ID_FJ:该节点的父级节点
树状结构数据如何用sql进行处理
HTEST1表(树状结构最底层的节点存数)
ID:数据节点
DATA:节点存数
树状结构数据如何用sql进行处理
做父级汇总后的结果展示:(每个节点的存数汇总)
树状结构数据如何用sql进行处理
Sql如下:
处理父级不存数的情况:
WITH ABC AS (
SELECT
ID,
ID_FJ,
CONNECT_BY_ROOT(ID) ROOT_ID
FROM HTEST
START WITH ID IN(SELECT ID FROM HTEST )
CONNECT BY PRIOR ID = ID_FJ
)
SELECT
B.ROOT_ID ID_CODE,
SUM(DATA) DATA
FROM HTEST1 A
RIGHT JOIN ABC B ON A.ID = B.ID
GROUP BY B.ROOT_ID
ORDER BY TO_NUMBER(B.ROOT_ID)

父级有存数的情况:
WITH ABC AS (
SELECT
ID,
ID_FJ,
CONNECT_BY_ROOT(ID) ROOT_ID,
CONNECT_BY_ISLEAF ISLEAF
FROM HTEST
START WITH ID IN(SELECT ID FROM HTEST )
CONNECT BY PRIOR ID = ID_FJ
)
SELECT
B.ROOT_ID ID_CODE,
SUM(DATA) DATA
FROM HTEST1 A
RIGHT JOIN ABC B ON A.ID = B.ID AND B.ISLEAF = ‘1’
GROUP BY B.ROOT_ID
ORDER BY TO_NUMBER(B.ROOT_ID)