oracle 查询问题

现在有一个表结构如下:
[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,请问该怎样做,感谢各位,没分了,谢谢了!

3个回答

[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 控制

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!