求一sql

liuyi8903 2004-04-09 03:53:31
再次求解.数据库得到一组数据,分别为
编码(上级码+2位码) 数量.
10 2
1010 3
1011 4
101110 3
20 5
2010 6
。。。 。。。
如何用高效的查询算法,将树形下的子集数量汇总归并求和得到如下值
10 12 (2+3+4+3)
1010 3
1011 7 (4+3)
101110 3
20 11 (5+6)
2010 6
。。。 。。。
...全文
36 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
guangli_zhang 2004-04-10
  • 打赏
  • 举报
回复
select a.编码 ,(select sum(nvl(b.数量,0))
from tab b where a.编码 = Substr(b.编码, 1, length(a.编码))
from table a
liuyi8903 2004-04-10
  • 打赏
  • 举报
回复
你的方案很好:)
我这里写了一个sql,大家来看看有什么问题
select code ,(select count(1) from table where where code like t.code||'%') from
table t
liuyi8903 2004-04-10
  • 打赏
  • 举报
回复
guangli_zhang(广丽)
首先非常感谢你回答我的问题:),你这种写法只是汇总一层。我写那种已经解决了。可以汇总n层节点数
snowy_howe 2004-04-09
  • 打赏
  • 举报
回复
如果子节点不确定的话,建议你使用存储过程来实现。
liuyi8903 2004-04-09
  • 打赏
  • 举报
回复
谢谢:)
子节点是不确定的。
snowy_howe 2004-04-09
  • 打赏
  • 举报
回复
我在实际项目曾碰到过此类问题,不过那个项目的情况是:
--明确知道只有三层!
如果对你的数据也成立的话,我给出一个比较复杂的sql,不算完美。
select substr(id,1,2) id,sum(nvl(sl,0)) sl from tt
group by substr(id,1,2)
union
select substr(id,1,4) id,sum(nvl(sl,0)) sl from tt
where length(id) > 2 group by substr(id,1,4)
union
select substr(id,1,6) id,sum(nvl(sl,0)) sl from tt
where length(id) >4 group by substr(id,1,6);
liuyi8903 2004-04-09
  • 打赏
  • 举报
回复
谢谢两位:)
还望大家多多关照
snowy_howe 2004-04-09
  • 打赏
  • 举报
回复
喂,楼上的老兄:下次麻烦你测试过了再拿来发,免得误导别人。
首先你先想想,编码 like 编码,起不到任何作用,在本题中是为真的。
那么子查询会把所有编码列出来,那么最后你的语句相当于
select 编码,sum(数量) from 表名 group by 编码;
这对吗??
本来你热心回答问题,我不应该冷嘲热讽,但是我实在看不下去有人不负责任。
如果言语唐突,请见谅!!
在此呼吁ORACLE版倡导良好的回答问题的态度,最起码先测试过再发。如果没有
测试环境,请注明“未经测试!”。
lcong 2004-04-09
  • 打赏
  • 举报
回复
试试
select 编码,sum(数量) from 表名 having 编码 in (select 编码 from 表名 where 编码 like 编码) group by 编码;

17,086

社区成员

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

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