create table tmp
(
id int,
number varchar(10),
name varchar(10)
)godeclear @t varchar(10)
select @t='A'
insert into tmp select id, number, name from 你的表 where number in (select number from 你的表 where name=@t)
while @@rowcount<>0
  insert into tmp select id, number, name from 你的表 where number in (select number from 你的表 where name in (select distinct name from tmp))
endselect distinct id from tmpdrop table tmp

解决方案 »

  1.   

    刚才的有点问题,会死循环。create table tmp
    (
    id int,
    number varchar(10),
    name varchar(10)
    )godeclear @t varchar(10)
    select @t='A'
    insert into tmp select id, number, name from 你的表 where number in (select number from 你的表 where name=@t)
    while @@rowcount<>0
      insert into tmp
         select id, number, name from 你的表
         where
           number in
             (select number from 你的表 where name in (select distinct name from tmp))
           and not exist (select id from tmp where tmp.id=你的表.id)
    endselect distinct id from tmpdrop table tmp
      

  2.   

    create table test(ID int,Number varchar(4),Name varchar(4))
    insert into test select 1,'001','A'
    insert into test select 2,'001','B' 
    insert into test select 3,'002','C'
    insert into test select 4,'003','B'
    insert into test select 5,'003','D'
    insert into test select 6,'004','E'
    insert into test select 7,'004','D'
    insert into test select 8,'004','C'
    insert into test select 9,'005','F'
    gocreate function f_str(@Name varchar(4))
    returns varchar(100)
    as
    begin
        declare @ret varchar(100)
        declare @t table(ID int,Number varchar(4),Name varchar(4))
        insert @t select * from test where Name=@Name
        
        while @@rowcount<>0
        begin
            insert into @t
            select a.* from test a,@t b 
            where 
                (a.Number=b.Number or a.Name=b.Name)
                and
                not exists(select 1 from @t where ID=a.ID)
        end
        
        set @ret=''
        select @ret=@ret+','+rtrim(ID) from (select distinct ID from @t) a
        set @ret=stuff(@ret,1,1,'')
        return @ret
    end
    goselect dbo.f_str('B') as Code
    go/*
    Code
    -----------------------------
    1,2,3,4,5,6,7,8
    */drop function f_str
    drop table test
      

  3.   

    libin_ftsafe(子陌红尘)  学习中
      

  4.   

    select @ret=@ret+','+rtrim(ID) from (select distinct ID from @t) a
     set @ret=stuff(@ret,1,1,'')请问:这两句是什么意思呀。。
      

  5.   

    to anycall2004(没事,瞎转悠!) ,
    那是把符合要求的记录的ID用逗号连成字符串,然后去掉第一个字符,即逗号.==========谢谢两位,结账