一條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]
本人熱衷於數據庫技術及算法的研究,志同道合之士, 歡迎探討