涉及Bom表如下结构
#jzMatBom主表(ID ,Number,Name,MatID)
/说明 ID是主键系统自动增长整数类型,Number是Bom主表的编码,Name是Bom主表的名称,MatID是主表BOM对应的物料/
#jzMatBomDetail子表(ID,MatBomID,MatID,Many,SHL,JiliangdanweiID)
/说明 ID是主键系统自动增长整数类型,MatBomID是对应Bom主表的ID,MatID是对应引用的物料,Many是组成数量,SHL是损耗率/
#jzMat物料表(ID ,Number,Name,JiliangdanweiID)
/说明 ID是主键系统自动增长整数类型,Number是物料表的编码,Name是物料表的名称,JiliangdanweiID是物料的单位/
求一个SQL语句得到某个Bom层次清单
create table #jzMat (ID int,Number varchar(100),Name varchar(100),jiliangdanweiID int )
insert into #jzMat values(1348 , 'xb00001' , '箱包成品', 1)
insert into #jzMat values(1349 , 'xb00002' , '箱包上盖', 1 )
insert into #jzMat values(1350 , 'xb00003' , '箱包下盖', 1 )
insert into #jzMat values(1351 , 'xb00004' , '箱包上盖原料' , 1)
insert into #jzMat values(1352 , 'xb00005' , '箱包上盖原料' , 1)
insert into #jzMat values(1353 , 'xb00006' , '箱包下盖原料' , 1)
insert into #jzMat values(1354 , 'xb00007' , '箱包下盖原料' , 1)
insert into #jzMat values(1395 , 'xb00008' , '箱包布料' , 14)
select ID,',',Number,',',Name,',',MatID from jzMatBom where Name like '%箱包%'
create table #jzMatBom (ID int,Number varchar(100),Name varchar(100),MatID int )
insert into #jzMatBom values(146 , 'xb00001' , '箱包成品' , 1348)
insert into #jzMatBom values(147 , 'xb00002' , '箱包上盖' , 1349)
insert into #jzMatBom values(148 , 'xb00003' , '箱包下盖' , 1350)
insert into #jzMatBom values(162 , 'xb00004' , '箱包上盖原料' , 1351)
create table #jzMatBomDetail (ID int,MatBomID int ,MatID int,Many decimal,Sll decimal,JiliangdanweiID int)
insert into #jzMatBomDetail values(2293 , 147 , 1351 , 1.00000000 , 0.0000 , 1)
insert into #jzMatBomDetail values(2294 , 147 , 1352 , 2.00000000 , 0.0000 , 1)
insert into #jzMatBomDetail values(2295 , 148 , 1353 , 2.00000000 , 0.0000 , 1)
insert into #jzMatBomDetail values(2296 , 148 , 1354 , 4.00000000 , 0.0000 , 1)
insert into #jzMatBomDetail values(2299 , 146 , 1349 , 1.00000000 , 0.0000 , 1)
insert into #jzMatBomDetail values(2300 , 146 , 1350 , 1.00000000 , 0.0000 , 1)
insert into #jzMatBomDetail values(2444 , 162 , 1395 , 0.50000000 , 0.0000 , 14)
求一个SQL得到如下结果:

可以用空格代替缩进
这是我用代码一行一行拼接的结果,sql语句结果就这样即可,层级是指BOM对应的第几层物料,1代表第一层,2代表第二层,3代表第三层。用空格多少来显示层次结构1个空格代表缩进去一点,2个代表缩进去更多!
层级 物料编码 物料名称 单位 用量
1 Xb00002 箱包上盖 1 1
2 (1个空格)xb00004 箱包上盖原料1 1 1
3 (2个空格)xb00008 箱包布料 14 0.5
2 (1个空格)xb00005 箱包上盖原料2 1 2
1 Xb00003 箱包下盖 1 1
2 (1个空格)xb00006 箱包下盖原料1 1 2
2 (1个空格)xb00007 箱包下盖原料2 1 4