我想列出物料清单的总和。我做了一些示例代码: http://sqlfiddle.com/#!3/da913/1
正如您所看到的,由于递归级别,物料清单正在重复。
所以,我希望得到的结果是:
┌────────────┬───────────┬────────────┐
│ParentPartId│ChildPartId│ChildPartQty│
├────────────┼───────────┼────────────┤
│SHOWER-A │GLASS-A │2 │
├────────────┼───────────┼────────────┤
│GLASS-A │SOMETHING-A│10 │
├────────────┼───────────┼────────────┤
│SOMETHING-A │SOMETHING-B│30 │
└────────────┴───────────┴────────────┘
我正在考虑按最高递归水平进行分组,但只是觉得凌乱和黑客。
答案 0 :(得分:1)
Here是一个可能有用的解决方案:
; with cte_gettopparents as
(
select a.*, ROW_NUMBER() over (order by a.ParentPartId) as ordr
from BillOfMaterial a
where not exists
(
select 1
from BillOfMaterial b
where b.ChildPartId = a.ParentPartId
)
)
--select * from cte_gettopparents
,
cte_getallchildren as
(
select *
from cte_gettopparents
union all
select a.ParentPartId, a.ChildPartId ,a.ChildPartQty * b.ChildPartQty,b.ordr
from BillOfMaterial a join cte_getallchildren b
on b.ChildPartId = a.ParentPartId
)
select ParentPartId, ChildPartId ,ChildPartQty, ordr as [hierarchyid]
from cte_getallchildren
order by ordr,ChildPartId
如果您需要不同的结果,请使用this:
select Distinct ParentPartId, ChildPartId ,ChildPartQty
from cte_getallchildren
order by ChildPartQty