2012-12-14 37 views
1

我有Microsoft SQL Server 2012,并且有表包含有关物料清单(物料清单)的所有信息。数据的格式如下:使用分级查询生成物料清单

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中做所有的技巧。

回答

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 

查询的结果是使特定item所需的每个subItem总数。

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