日期:2014-05-19  浏览次数:20438 次

求救SQL语句
现在有一个产品表   BOM如下:
  产品编码       组件编码  
  3000                 2000
  3000                 1000
  3000                 2100
  。。。             。。。
  2000                 1200
  2000                 1300
  。。。               。。。
  2100                 1300
  2100                 1500
。。。             。。。。

也就是产品3000   由2000,1000,2100组成,其中2000又由1200,1300组成,2100由1300,1500组成。。可能有很多层的。
现在希望得到3000的最低层的所有组成,也就是1开头的(也就是叶)
即得到以下结果:
    产品       叶组件
    3000       1000
    3000       1200
    3000       1300
    3000       1500
    。。。   。。。
请各位大哥帮一下忙


------解决方案--------------------
如果只有三级的层次:

declare @BOM table(PID int,ID int)
insert into @BOM select 3000,2000
insert into @BOM select 3000,1000
insert into @BOM select 3000,2100
insert into @BOM select 2000,1200
insert into @BOM select 2000,1300
insert into @BOM select 2100,1300
insert into @BOM select 2100,1500

select
distinct a.PID,isnull(C.ID,isnull(b.ID,a.ID)) as ID
from
@BOM a
left join
@BOM b
on
a.ID=b.PID
left join
@BOM c
on
b.ID=c.PID
where
a.PID=3000

/*
PID ID
----------- -----------
3000 1000
3000 1200
3000 1300
3000 1500
*/