2

私は Microsoft SQL Server 2012 を使用しており、BOM (部品表) に関するすべての情報を含むテーブルがあります。データの形式は次のとおりです。

Item   | SubItem  | Quantity
item_1 | item_2   | 2
item_1 | item_3   | 3
item_1 | item_4   | 2
item_2 | item_5   | 2
item_2 | item_6   | 2

等々...

したがって、item_1 を 10 個持ちたい場合は、すべてのアイテムとアイテムのサブアイテムの数量をこの乗数で乗算する必要があります。そして、クエリでこの種の結果を達成したいと思います:

item_1 - 10pcs - 1 lvl
  item_2 - 20pcs - 2 lvl
    item_5 - 40pcs - 3 lvl
    item_6 - 40pcs - 3 lvl 
  item_3 - 30pcs - 2 lvl
  item_4 - 20pcs - 2 lvl

これを良い方法で達成するためのヒントはありますか? クエリでこれができない場合は、Excel の VBA ですべてのトリックを実行するという別のオプションがあります。

4

1 に答える 1

1

これは、再帰クエリで実行できます。ここにあなたが始めるための何かがあります:

with all_item_counts as (
select item, subitem, quantity as q, 0 as level from bom
union all 
select all_item_counts.item, bom.subitem, quantity * q, level + 1 
    from all_item_counts
    join bom on bom.item = all_item_counts.subitem
)
select item,subitem,sum(q) from all_item_counts
   group by item, subitem
   order by item, subitem

subItemクエリの結果は、特定の を作成するために必要なそれぞれの総数itemです。

SQLFiddle hereで動作することがわかります。より複雑なケースが機能することを示すために、サンプル データに少し追加しました。

于 2012-12-14T11:42:35.993 に答える