物料清单数量SQL

时间:2014-11-10 13:21:22

标签: sql sql-server-2008

我想列出物料清单的总和。我做了一些示例代码: http://sqlfiddle.com/#!3/da913/1

正如您所看到的,由于递归级别,物料清单正在重复。

所以,我希望得到的结果是:

┌────────────┬───────────┬────────────┐ │ParentPartId│ChildPartId│ChildPartQty│ ├────────────┼───────────┼────────────┤ │SHOWER-A │GLASS-A │2 │ ├────────────┼───────────┼────────────┤ │GLASS-A │SOMETHING-A│10 │ ├────────────┼───────────┼────────────┤ │SOMETHING-A │SOMETHING-B│30 │ └────────────┴───────────┴────────────┘

我正在考虑按最高递归水平进行分组,但只是觉得凌乱和黑客。

1 个答案:

答案 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