興味深いSQLの問題があります。私は部品表を作る部品の階層表を持っています。私はこのようなクエリで、この構造の階層を取得階層データセットの複雑な合計を計算するためのヘルプ
ASSEMBLY
---------
parent_part_id
part_id
quantity
:
SELECT level, part_id, quantity
from assembly
start with parent_part_id = 1
connect by parent_part_id = prior part_id;
出力は次のようになります。これに類似
level part_id quantity
----- ------- ---------
1 2 2
2 3 10
1 4 2
2 5 1
3 3 5
これまでのところは良いです。
質問:トップレベルアセンブリ(パート1)を作成するために必要な各パーツの合計数を計算するにはどうすればよいですか?
この結果を部品でグループ化して数量を合計することは正しくありません。これは、階層内の現在の部品のすぐ上にある部品の数を数量に乗じて、ツリーを再帰的に上げる必要があるからです。
これはLAG機能だと思っていますが、視覚化に問題があります。
編集:期待される結果:
part_id quantity
------- --------
2 2
3 30
4 2
5 2
より編集:私は数学の列が私は:)実行する計算の文字列表現を返します
SELECT rownum, level lvl, part_id, quantity, unit_of_measure
, connect_by_isleaf || sys_connect_by_path(quantity,'*') math
from assembly
start with parent_part_id = 1
connect by parent_part_id = prior part_id
このクエリで興味深い結果を得ます例えば、それは言うかもしれません:
1*1*2*10
または何か類似した適切な...おそらく、これを解析して結果を返す関数を作ることで、問題が解決されます。誰もこれが大変だと思いますか?
Oracleの11 R2では
関連ノートで、私は申し訳ないが、私は質問を理解していない*私は、トップレベルのアセンブリ(パート1)を作るために必要な各部品の合計数を計算する方法を教えてください*と期待される結果をどう導き出すか。 –
@Rene - パート1は、最初の階層化結果を作成する元のparent_part_idです。これらの結果を見ると、part_id 2が2つ必要であることに気付きます。それぞれpart_id 10が必要です。3 - このブランチは、パート3の合計に20を払います。後で同様の方法で10個のパート3が必要です。合計で30 – Randy