一條SQL開BOM 與 BOM回溯(WhereUse)

一條SQL開BOM

with result as    
( 
select Company,1 L,PartNum p,PartNum,MtlPartNum,QtyPer QtyPer_Father,
cast((QtyPer+case when EstScrapType='Q' then EstScrap else (QtyPer*EstScrap/100) end) as decimal(20,5)) QtyPers_Total,
UOMCode,cast(MtlPartNum as nvarchar(max)) ReportPath from erp.partmtl where partnum='XXXXXX' and Company='XXXX' and RevisionNum='A'
union all 
select result.Company,result.L+1,result.PartNum p,partmtl.PartNum,partmtl.MtlPartNum,partmtl.QtyPer QtyPer_Father,
cast(result.QtyPers_Total*((partmtl.QtyPer+case when partmtl.EstScrapType='Q' then partmtl.EstScrap 
else (partmtl.QtyPer*partmtl.EstScrap/100) end)) as decimal(20,5)) QtyPers_Total,
partmtl.UOMCode,result.ReportPath+'->'+partmtl.MtlPartNum ReportPath  from erp.partmtl, result where result.MtlPartNum = partmtl.PartNum  
and result.Company=partmtl.Company  
) 
select (ROW_NUMBER() over (order by ReportPath)) as seq,* from result t1 order by ReportPath;

BOM回溯 WhereUse

with r
  as
(SELECT 1 L,Company,PartNum,RevisionNum,MtlPartNum,CAST(QtyPer AS DECIMAL(10,2)) BranchQty
  ,CAST(MtlPartNum+'->'+PartNum AS NVARCHAR(MAX)) Path
  FROM erp.partmtl where company='XXXXXXX' and MtlPartNum='XXXXX'
  union all
  SELECT L+1, pm.Company,pm.PartNum,pm.RevisionNum,pm.MtlPartNum,CAST(r.BranchQty*pm.QtyPer AS DECIMAL(10,2)) BranchQty
    ,CAST (r.Path+'->'+pm.PartNum AS NVARCHAR(MAX)) 
    FROM erp.PartMtl pm 
    INNER JOIN r ON pm.Company = r.Company AND r.PartNum=pm.MtlPartNum
  )
SELECT * FROM r

轉載請註明出處,聯繫我: [email protected]
本人熱衷於數據庫技術及算法的研究,志同道合之士, 歡迎探討

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章