请教个SQL递归求和的问题

sunjie001109 2009-03-03 06:55:15
有个一个表,如下
NAME P_NAME NUM
a -1 3
b -1 4
c a 5
d b 6
e c 7
f d 8
g e 9

我想得到如下
NAME P_NAME NUM
a -1 24
b -1 18

其中 24=3+5+7+9
18= 4+6+8
感觉需要在递归中求和,请高手指点下。
...全文
1626 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
厦门飞鱼 2011-08-26
  • 打赏
  • 举报
回复
select NAME,P_NAME,
(select sum(NUM) from t connect by P_NAME = prior NAME start with NAME= t0.NAME) NUM
from t t0
where P_NAME='-1' 这种写法是可以做出来的,但只适合数据量少的,数据量很大速度就不行了
gogo91now 2011-08-09
  • 打赏
  • 举报
回复
学习学习!!!!!!!!!
fuyou001 2009-03-04
  • 打赏
  • 举报
回复
学习
sunjie001109 2009-03-04
  • 打赏
  • 举报
回复
3楼正解
小墨鱼 2009-03-04
  • 打赏
  • 举报
回复
此等经典sql,收藏了。。O(∩_∩)O~
oracledbalgtu 2009-03-03
  • 打赏
  • 举报
回复
create table test(
NAME varchar2(20), P_NAME varchar2(20), NUM int);

insert into test values('a','-1',3 );
insert into test values('b','-1',4 );
insert into test values('c','a',5 );
insert into test values('d','b',6 );
insert into test values('e','c',7 );
insert into test values('f','d',8 );
insert into test values('g','e',9 );
COMMIT;
SELECT NAME, P_NAME, SUM(NUM) num
FROM (SELECT NUM, CONNECT_BY_ROOT NAME NAME, CONNECT_BY_ROOT P_NAME P_NAME
FROM TEST S
CONNECT BY PRIOR NAME = P_NAME
START WITH P_NAME = '-1')
GROUP BY NAME, P_NAME;
输出:
NAME P_NAME NUM
b -1 18
a -1 24
[Quote=引用楼主 sunjie001109 的帖子:]
有个一个表,如下
NAME P_NAME NUM
a -1 3
b -1 4
c a 5
d b 6
e c 7
f d 8
g e 9

我想得到如下
NAME P_NAME NUM
a -1 24
b -1 18

其中 24=3+5+7+9
18= 4+6+8
感觉需要在递归中求和,请高手指点下。
[/Quote]
子陌红尘 2009-03-03
  • 打赏
  • 举报
回复
try:

select
NAME,P_NAME,
(select sum(NUM) from t connect by P_NAME = prior NAME start with NAME= t0.NAME) NUM
from
t t0
where
P_NAME=-1;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧