树状结构数据如何用sql进行处理
数据结构存储方式如下:
最底层节点存数据,如:4,8,9,6,12,13,11
父节点不存数。
根据以上结构建如下两张表:
HTEST表
ID:所有节点
ID_FJ:该节点的父级节点
HTEST1表(树状结构最底层的节点存数)
ID:数据节点
DATA:节点存数
做父级汇总后的结果展示:(每个节点的存数汇总)
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)