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 に答える