求一句按父节点统计的SQL

fingerfox 2010-05-17 06:26:58
表和测试数据如下
create table hierartest(id number,parentid number,name varchar2(100),percent number);

insert into hierartest values (1,0,'par',0);
insert into hierartest values (2,1,'chi1',12);
insert into hierartest values (3,1,'chi1',12);
insert into hierartest values (4,0,'parn',0);
insert into hierartest values (5,4,'parc',0);
insert into hierartest values (6,5,'c5',12);
insert into hierartest values (7,4,'c4',12);
insert into hierartest values (8,4,'c42',12);
insert into hierartest values (9,1,'chi1',12);
commit;

需要的结果是父节点的值是各子节点之和.
1 1 0 par 24
2 2 1 chi1 12
3 3 1 chi1 12
4 4 0 parn 48
5 5 4 parc 12
6 6 5 c5 12
7 7 4 c4 12
8 8 4 c42 12
9 9 1 chi1 12

目前进展
select id,parentID,LPAD(' ',3*(LEVEL-1))||Name name, percent from hierartest
connect by prior id = parentid
start with parentID = 0

求改良
...全文
229 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangren 2010-05-18
  • 打赏
  • 举报
回复
SELECT t.*,
(SELECT SUM(a.percent)
FROM hierartest a
START WITH a.id = t.id
CONNECT BY PRIOR a.id = a.parentid) sumpercent
FROM hierartest t;
小灰狼W 2010-05-18
  • 打赏
  • 举报
回复
..对id列和parentid建索引
每一条记录都要往下找子节点,没有更好的办法
这里是否非子节点的percent都为0?
fingerfox 2010-05-18
  • 打赏
  • 举报
回复
性能好差阿...我表里面4k多万纪录...运行不出来了...
zhangwonderful 2010-05-17
  • 打赏
  • 举报
回复
oracle 9i可以使用以下语句:
SELECT ID,parentid,NAME,
(SELECT sum(PERCENT) FROM hierartest
START WITH ID=t.ID
connect by prior id=parentid)percent
from hierartest t
zhangwonderful 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wildwave 的回复:]

SQL code
SELECT ID,parentid,NAME,
(SELECT sum(PERCENT) FROM hierartest
WHERE CONNECT_BY_ISLEAF=1
START WITH ID=t.ID
connect by prior id=parentid)percent
from hierartest t;
[/Quote]
oracle 10g以上可以使用此语句
zhangwonderful 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 fingerfox 的回复:]
表和测试数据如下
create table hierartest(id number,parentid number,name varchar2(100),percent number);

insert into hierartest values (1,0,'par',0);
insert into hierartest values (2,1,'chi1',12);
insert ……
[/Quote]
oracle 10g以上可以使用此语句
fingerfox 2010-05-17
  • 打赏
  • 举报
回复
哈哈,回家了,测试不了,明天再试试
RunCanRun 2010-05-17
  • 打赏
  • 举报
回复
主要是用树状查询语句(层次查询语句)
start with ---从xx开始
connect by prior ----连接条件

select ID,parentid,name,percent
from hierartest
where connect_by_isleaf = 1
start with id = 1
connect by prior id = parentid;
Adebayor 2010-05-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 fingerfox 的回复:]
需要的结果是父节点的值是各子节点之和.
1 1 0 par 24
2 2 1 chi1 12
3 3 1 chi1 12
4 4 0 parn 48
5 5 4 parc 12
6 6 5 c5 12
7 7 4 c4 12
8 8 4 c42 12
9 9 1 chi1 12
[/Quote]
没看明白 帮顶
小灰狼W 2010-05-17
  • 打赏
  • 举报
回复
SELECT ID,parentid,NAME,
(SELECT sum(PERCENT) FROM hierartest
WHERE CONNECT_BY_ISLEAF=1
START WITH ID=t.ID
connect by prior id=parentid)percent
from hierartest t;

17,377

社区成员

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

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