Sql 用层次查询生成BOM表
我有Microsoft SQL Server 2012,有一个表包含有关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件物品,那么它必须用这个乘数乘以所有物品和子物品的数量。我想通过查询实现这种
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
查询结果是生成特定项所需的每个子项的总数
你可以看到它在工作。我在您的示例数据中添加了一点,以显示更复杂的情况是可行的