0

我有这个计算总重量的 SQL 查询:

select c.componentid, nvl(cs.weightkg, 0) as componentkg,
 (case 
    when exists (select 1 from component where fkcomponentid = c.componentid) then
      (select sum(nvl(cs.weightkg, 0)) as kg FROM  component a, componentstats cs  where a.fkcomponentid is not null and cs.componentstatsid = a.componentstatsid and a.fkcomponentid = c.componentid)
 end) as childrenkg
 from component c, componentstats cs  
 where 
 cs.componentstatsid = c.componentstatsid
 and componentid = ?
 order by c.componentid;

我如何将其重写为分层查询?这可能吗?

编辑:该计划的图片

在此处输入图像描述

4

1 回答 1

1

基本查询将是这样的:

select the_level, c.componentid, NVL( cs.weightkg,0) as componentkg
  from ( select level the_level, componentid from component
           start with componentid = ?
           connect by fkcomponentid = prior componentid
       ) c
  join componentstats using (componentstatsid)
order by the_level, c.componentid

这将为您提供每个单独的组件及其重量。然后,您可以以各种方式进行分组和求和 - 如果您想要原始查询中的子组件权重的总和,则可以按级别进行分组,或者如果您只想要总权重,则可以按所有方式进行分组和求和。

于 2013-01-30T14:10:05.870 回答