2012-12-14 2 views
1

Microsoft SQL Server 2012가 있으며 BOM (BOM)에 대한 모든 정보가 포함 된 테이블이 있습니다. 데이터는이 형식으로되어 있습니다 :계층 적 쿼리로 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 

등등 ...

그래서 내가 ITEM_1의 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에서 모든 작업을 수행 할 수 있습니다.

답변

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에서 작동하는 것을 볼 수 있습니다. 좀 더 복잡한 경우가 작동한다는 것을 보여주기 위해 샘플 데이터에 약간을 추가했습니다.