ID  classid   name
1     1,2,3   西服 
2     2,3    中山装
3     1,3    名裤
classtb 
id   classname
1     衣服
2     上衣
3     裤子我得的结果是
id   classname            name
1     衣服,上衣,裤子      西服 
2          上衣,裤子     中山装
3     衣服,裤子          名裤在线等,帮我搞出来马上给分。

解决方案 »

  1.   

    create table tba(ID int,classid varchar(20),name varchar(10))
    insert into tba values(1,'1,2,3','西服')
    insert into tba values(2,'2,3'  ,'中山装')
    insert into tba values(3,'1,3'  ,'名裤')
    create table tbb(ID varchar(10), classname varchar(10))
    insert into tbb values('1','衣服')
    insert into tbb values('2','上衣')
    insert into tbb values('3','裤子')
    go
    while(exists (select * from tba,tbb where charindex(tbb.id,tba.classid) >0))
    update tba
    set classid= replace(classid,tbb.id,tbb.classname)
    from tbb
    where charindex(tbb.id,tba.classid)>0select * from tbadrop table tba,tbb/*
    ID          classid              name       
    ----------- -------------------- ---------- 
    1           衣服,上衣,裤子       西服
    2           上衣,裤子            中山装
    3           衣服,裤子            名裤
    (所影响的行数为 3 行)
    */
      

  2.   

    create table tab1(ID int,classid varchar(20),name varchar(10))
    insert into tab1 values(1,'1,2,3','西服')
    insert into tab1 values(2,'2,3'  ,'中山装')
    insert into tab1 values(3,'1,3'  ,'名裤')
    create table tab2(ID varchar(10), classname varchar(10))
    insert into tab2 values('1','衣服')
    insert into tab2 values('2','上衣')
    insert into tab2 values('3','裤子')
    go
    while(exists (select * from tab1,tab2 where charindex(tab2.id,tab1.classid) >0))
    update tab1
    set classid= replace(classid,tab2.id,tab2.classname)
    from tab2
    where charindex(tab2.id,tab1.classid)>0select * from tab1drop table tab1,tab2
      

  3.   

    ID          classid              name
    ----------- -------------------- ----------
    1           衣服,上衣,裤子             西服
    2           上衣,裤子                中山装
    3           衣服,裤子                名裤(3 行受影响)
      

  4.   

    create table tba(ID int,classid varchar(20),name varchar(10))
    insert into tba values(1,'1,2,3','西服')
    insert into tba values(2,'2,3'  ,'中山装')
    insert into tba values(3,'1,3'  ,'名裤')
    create table tbb(ID varchar(10), classname varchar(10))
    insert into tbb values('1','衣服')
    insert into tbb values('2','上衣')
    insert into tbb values('3','裤子')
    go--第1种方法,创建函数来显示
    create function f_hb(@id varchar(10))
    returns varchar(1000)
    as
    begin
      declare @str varchar(1000)
      set @str=''
      select @str=@str+','+[classname] from tbb where charindex(','+cast(id as varchar)+',',','+@id+',')>0
      return stuff(@str,1,1,'')
    end
    go 
    select id,classid=dbo.f_hb(classid),name from tba
    drop function f_hb
    /*
    id          classid       name       
    ----------- ------------- ---------- 
    1           衣服,上衣,裤子 西服
    2           上衣,裤子      中山装
    3           衣服,裤子      名裤
    (所影响的行数为 3 行)
    */--第2种方法.update
    while(exists (select * from tba,tbb where charindex(tbb.id,tba.classid) >0))
    update tba
    set classid= replace(classid,tbb.id,tbb.classname)
    from tbb
    where charindex(tbb.id,tba.classid)>0
    select * from tba
    /*
    ID          classid              name       
    ----------- -------------------- ---------- 
    1           衣服,上衣,裤子       西服
    2           上衣,裤子            中山装
    3           衣服,裤子            名裤
    (所影响的行数为 3 行)
    */
    drop table tba,tbb