我有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,则必须将所有商品和商品子商品数量乘以此乘数。我想用查询来实现这种结果:
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中完成所有技巧。
答案 0 :(得分: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
的总数。
您可以在an SQLFiddle here中看到它正常工作。我在您的示例数据中添加了一些内容,以显示更复杂的案例。