本帖最后由 pscaine 于 2014-01-21 11:32:34 编辑

解决方案 »

  1.   

    select * from BOM表 where 母件= ‘組合-25.400X1140.00’and 类型=0 
      

  2.   

    递归啊
    with ta as
    (select * from BOM表
    where 母件= ‘組合-25.400X1140.00’and 类型=0
    union all
    select * from ta a
    inner join BOM表 b on a.子键=b.目件
    )
    select * from ta
    类型为0你自己加,
      

  3.   


    create table BOM(母件 nvarchar(100),子件 nvarchar(100),类型 int)
    insert into BOM values('組合-25.400X1140.00','S45C-15.400X1140.00',1)
    insert into BOM values('組合-25.400X1140.00','SCM420-25.400X045.500',1)
    insert into BOM values('組合-25.400X1140.00','SS41-10.200X030.700',0)
    insert into BOM values('組合-25.400X1140.00','SS41-23.300X011.300',0)
    insert into BOM values('組合-25.400X1140.00','U01-0001',0)
    insert into BOM values('組合-25.400X1140.00','U01-0002',0)
    insert into BOM values('SCM420-25.400X045.500','E02-0050',0)
    insert into BOM values('SCM420-25.400X045.500','E02-0182',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0019',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0093',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0130',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0137',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0137',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0145',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0253',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0343',0)
    insert into BOM values('SCM420-25.400X045.500','SCM420-25.00X6.0M-B',0)--跟级联查询一样 加载执行下面语句  显示只是母件不是子件
    select 母件 from BOM where 母件 not in(select 子件 from BOM) group by 母件
    --当点击母件时 显示其下类型为0的子件, 参数为点击的母件
    select 子件 
    from BOM 
    where 母件='組合-25.400X1140.00' and 类型=0
      

  4.   


    你理解我错 我的意思了...我的意思是  一个母件下面 又多个子件,子件又类型0或者类型1.
    如果是0列出来,1的话 继续查找他下面类型为0的子件有没有直接select 语句 可以查出来.
      

  5.   


    你理解我错 我的意思了...我的意思是  一个母件下面 又多个子件,子件又类型0或者类型1.
    如果是0列出来,1的话 继续查找他下面类型为0的子件有没有直接select 语句 可以查出来.
    你的数据库是2000的吧
      

  6.   


    你理解我错 我的意思了...我的意思是  一个母件下面 又多个子件,子件又类型0或者类型1.
    如果是0列出来,1的话 继续查找他下面类型为0的子件有没有直接select 语句 可以查出来.
    你的数据库是2000的吧是的
      

  7.   


    你理解我错 我的意思了...我的意思是  一个母件下面 又多个子件,子件又类型0或者类型1.
    如果是0列出来,1的话 继续查找他下面类型为0的子件有没有直接select 语句 可以查出来.
    你的数据库是2000的吧是的那就得用循环语句来实现,不能通过一个select来实现的
      

  8.   

    先用上面的数据,给你写了一个大概的:if object_id('[BOM]') is not null drop table [BOM]
    go create table BOM(母件 nvarchar(100),子件 nvarchar(100),类型 int)
    insert into BOM values('組合-25.400X1140.00','S45C-15.400X1140.00',1)
    insert into BOM values('組合-25.400X1140.00','SCM420-25.400X045.500',1)
    insert into BOM values('組合-25.400X1140.00','SS41-10.200X030.700',0)
    insert into BOM values('組合-25.400X1140.00','SS41-23.300X011.300',0)
    insert into BOM values('組合-25.400X1140.00','U01-0001',0)
    insert into BOM values('組合-25.400X1140.00','U01-0002',0)
    insert into BOM values('SCM420-25.400X045.500','E02-0050',0)
    insert into BOM values('SCM420-25.400X045.500','E02-0182',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0019',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0093',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0130',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0137',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0137',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0145',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0253',0)
    insert into BOM values('SCM420-25.400X045.500','E05-0343',0)
    insert into BOM values('SCM420-25.400X045.500','SCM420-25.00X6.0M-B',0)
    go
    --1.定义表变量DECLARE @a nvarchar(100)
    SET @a='組合-25.400X1140.00'declare @tb table
    (
    母件 nvarchar(100),
    子件 nvarchar(100),
    类型 int,
    level int       --层级
    )
    --2.递归开始  
    insert into @tb 
    SELECT bom.* ,1 [level]
    FROM BOM 
    where 母件 = @a--3.递归的过程
    while @@ROWCOUNT > 0
    begin
        
        insert into @tb
    select b.母件,b.子件,b.类型,level + 1
    from @tb t
    inner join bom b
    on b.母件  =t.子件
       and t.类型 = 1
        where not exists(select 1 from @tb t2 
                         where t.level < t2.level)
    end
    --4.最后查询
    SELECT 母件,子件,类型
     FROM  @tb
     where 类型 = 0
    /*
    母件 子件 类型
    組合-25.400X1140.00 SS41-10.200X030.700 0
    組合-25.400X1140.00 SS41-23.300X011.300 0
    組合-25.400X1140.00 U01-0001 0
    組合-25.400X1140.00 U01-0002 0
    SCM420-25.400X045.500 E02-0050 0
    SCM420-25.400X045.500 E02-0182 0
    SCM420-25.400X045.500 E05-0019 0
    SCM420-25.400X045.500 E05-0093 0
    SCM420-25.400X045.500 E05-0130 0
    SCM420-25.400X045.500 E05-0137 0
    SCM420-25.400X045.500 E05-0137 0
    SCM420-25.400X045.500 E05-0145 0
    SCM420-25.400X045.500 E05-0253 0
    SCM420-25.400X045.500 E05-0343 0
    SCM420-25.400X045.500 SCM420-25.00X6.0M-B 0
    */
      

  9.   

    select 母件,子件,类型
    from BOM 
    where 类型=0
    union 
    select 母件,子件,类型 
    from BOM 
    where 母件 in(
    select 子件
    from BOM 
    where 类型=1 
    )
    这个行不行?