Sql 用层次查询生成BOM表

Sql 用层次查询生成BOM表,sql,sql-server,recursion,hierarchy,sql-server-2012,Sql,Sql Server,Recursion,Hierarchy,Sql Server 2012,我有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 等等 所以如果我想要10件物品,那么它必须用这个乘数乘以所有物品和子物品的数量。我想通过查询实现这种

我有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
等等

所以如果我想要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中执行所有技巧。

这可以通过递归查询来完成。以下是一些让您开始学习的内容:

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
查询结果是生成特定
项所需的每个
子项的总数

你可以看到它在工作。我在您的示例数据中添加了一点,以显示更复杂的情况是可行的