sql求救。续开帖,在线等,急。ATGC和bzszp(SongZip)继续帮看看,谢

superjj2002 2004-11-02 10:09:43
id字段用一个9位字符表示一个3层结构,每3位代表一层编码
001000000--001002000
001000000--001003000
004000000--004005000--004005006
004000000--004005000--004005007
004000000--004008000--004008009

表:
id value
001000000
001002000 100 (一定没有001002004这样的项,对于前6位是001002的id,001002000是最底层了)
001003000 100
004000000
004005000 (这项一开始不会有数据,因为它是004005006延伸上来的)
004005006 100
004005007 100 (对于前6位是004005的项,可能有多个下层)
004008000
004008009 100
(总之,表中只有叶子结点有数据)

结果:
001003000 100
001002000 100
001000000 200
004005006 100
004005007 100
004005000 200
004008009 100
004008000 100
004000000 300

其实就是个3层的树状结构,叶子结点有数据,但是叶子结点不一定是最底层,求各层根结点数据。
如果更多层数据,是不是可以有个通用的算法?
达人多多帮忙。

PS:谁能给点 分析函数语法 介绍类的东东,给我学习一下,感谢。
...全文
55 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
superjj2002 2004-11-02
  • 打赏
  • 举报
回复
谢谢大家,帖子结了。
从中间表取聚集的方法可行,楼上的方法也不错,看起来简单。偶再琢磨琢磨,再次感谢大家。
bzszp 2004-11-02
  • 打赏
  • 举报
回复
以前考虑得有些复杂了,应该比较容易就可以解决。
10:56:40 SQL> select * from test;

ID VALUE
-------------------- ----------
001000000
001002000 100
004000000
004005000
004005006 100
004005007 100
004008000
004008009 100
001003000 100

已选择9行。

已用时间: 00: 00: 00.31
10:56:51 SQL> update test set value=(select sum(value) from test t
10:56:52 2 where t.id like rtrim(test.id,'0')||'%');

已更新9行。

已用时间: 00: 00: 00.32
10:56:53 SQL> select * from test;

ID VALUE
-------------------- ----------
001000000 200
001002000 100
004000000 300
004005000 200
004005006 100
004005007 100
004008000 100
004008009 100
001003000 100

已选择9行。

已用时间: 00: 00: 00.31
10:56:57 SQL>
liuyi8903 2004-11-02
  • 打赏
  • 举报
回复
select id,sum(tvalue),
sum(sum(tvalue)) over(order by id rows unbounded preceding)
from table
group by id
union
select substr(id,1,6)||'000' ,sum(tvalue),
sum(sum(tvalue)) over(order by substr(id,1,6)||'000' rows unbounded preceding)
from table
group by substr(wellno,1,6)||'000'
union
select substr(id,1,3)||'000000' ,sum(tvalue),
sum(sum(tvalue)) over(order by substr(id,1,3)||'000000' rows unbounded preceding)
from table
group by substr(id,1,3)||'000000'
qiaozhiwei 2004-11-02
  • 打赏
  • 举报
回复
既然是树,是否考虑树的遍历呢,后序一下可不可以
superjj2002 2004-11-02
  • 打赏
  • 举报
回复
还有,每层的代码编码目前不会有重复

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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