2012-12-14 51 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中工作。我在示例數據中添加了一點,以顯示更復雜的情況。