现在有一个表结构如下:
[table]
|id|name|num|parentid|
|1|A|2|0|
|2|B|5|1|
|3|C|4|2|
|4|D|5|3|
|5|E|5|1|
|6|F|5|1|
[/table]
现在我只想查parentid是1的记录,但是B下面的记录的num我是需要都加在B上面的,比如我查询出来B的num应该是5+4+5=14,请问该怎样做,感谢各位,没分了,谢谢了!
[code="sql"]
WITH t AS (
SELECT '1' tid,'A' tname,2 num,'0' parentid FROM DUAL UNION ALL
SELECT '2' tid,'B' tname,5 num,'1' parentid FROM DUAL UNION ALL
SELECT '3' tid,'C' tname,4 num,'2' parentid FROM DUAL UNION ALL
SELECT '4' tid,'D' tname,5 num,'3' parentid FROM DUAL UNION ALL
SELECT '5' tid,'E' tname,5 num,'1' parentid FROM DUAL UNION ALL
SELECT '6' tid,'F' tname,5 num,'1' parentid FROM DUAL
)
SELECT m.root,
SUM(m.num) num
FROM (SELECT t.*,
CONNECT_BY_ROOT(t.tid) root
FROM t
START WITH t.parentid = '1'
CONNECT BY PRIOR t.tid = t.parentid) m
GROUP BY m.root
ORDER BY m.root
ROOT NUM
2 14
5 5
6 5
[/code]
你的描述不是很清晰,不过我应该理解你的意思了,你想根据树节点的id统计下面所有子节点的num的和,下面的语句应该可以满足你的需求:
1[code]
select sum(num) from tblTest t start with parentid=1 connect by prior id=parentid
[/code]
上面的语句是统计所有id=1的子树的num之和,不包括id=1的节点,
2[code]
select sum(num) from tblTest t start with id=1 connect by prior id=parentid
[/code]
同1,不过包括id=1的节点
3[code]
select sum(num) from tblTest t start with parentid=1 connect by prior id=parentid and level <2
[code]
统计所有id=1的直接子节点,不包括id=1的节点,通过 level<2 控制
3
select sum(num) from tblTest t start with parentid=1 connect by prior id=parentid and level <2
统计所有id=1的直接子节点,不包括id=1的节点,通过 level<2 控制