举例表结构Tab1     (字段1和字段2都是char类型,长度都为30)字段1                                  字段2
001       002       003                abc       efg(001,002,003后面是7个空格,字段2的值也是一样,就是每一项占10个char,共有3项,每一项都可以为空即10个空格 ) Tab2
字段1      字段2
001         红
002         篮
002         绿
我想要的结果红abc 篮efg 绿原来Tab1没有字段2的时候我已经做出来了,后来加了字段二就不知道怎么办了。
谢谢。

解决方案 »

  1.   

    create table tab1(字段1 char(30),字段2 char(30))
    insert into tab1(字段1,字段2)
    select '001'+space(7)+'002'+space(7)+'003'+space(7),'abc'+space(7)+'efg'+space(7)
    create table tab2(字段1 char(3),字段2 char(2))
    insert into tab2(字段1,字段2)
    select '001','红'
    union all select '002','篮'
    union all select '003','绿'update tab1
    set 字段1=replace(字段1,'       ',','),
    字段2=replace(字段2,'       ',',')create function uf_splitstring
    (
    @str varchar(8000) --要分拆的字符串
    ,@spli varchar(10) --字符串分隔符
    )
    returns @retab table(istr varchar(8000))
    as
    begin
    declare @i     int
    declare @splen int
    select @splen=len(@spli),@i=charindex(@spli,@str)
    while @i > 0
    begin
    insert into @retab 
    values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    select @i=charindex(@spli,@str)
    end
    if @str<>'' insert into @retab values(@str)
    return
    endcreate function uf_returnstr(@col1 char(30),@col2 char(30))
    returns varchar(1000)
    as
    begin
    declare @str varchar(1000)
    set @str=''
    declare @t1 table(id int identity(1,1),col varchar(10))
    declare @t2 table(id int identity(1,1),col varchar(10))
    insert into @t1(col)
    select istr from dbo.uf_splitstring(@col1,',')
    insert into @t2(col)
    select istr from dbo.uf_splitstring(@col2,',')
    update a
    set a.col=isnull(b.字段2,'')+isnull(c.col,'')+' '
    from @t1 a
    inner join tab2 b on ltrim(rtrim(a.col))=b.字段1
    left join @t2 c on a.id=c.id
    select @str=@str+col from @t1
    return @str
    end--调用
    select dbo.uf_returnstr(字段1,字段2) from tab1--结果
    ---------------------------------------------------------------- 
    红abc 篮efg 绿 (所影响的行数为 1 行)
      

  2.   


    select c.字段2+t.b as result
    from (
    select left(字段1,10) as a,left(字段2,10) as b from tab1
    union all
    select substring(字段1,11,10) as a,left(字段2,11,10) as b from tab1
    union all
    select substring(字段1,21,10) as a,left(字段2,21,10) as b from tab1
    ) as t,tab2 c
    where t.a=c.字段1
      

  3.   


    declare @r varchar(200)
    set @r=''select @r=@r+c.字段2+t.b as result
    from (
    select left(字段1,10) as a,left(字段2,10) as b from tab1
    union all
    select substring(字段1,11,10) as a,left(字段2,11,10) as b from tab1
    union all
    select substring(字段1,21,10) as a,left(字段2,21,10) as b from tab1
    ) as t,tab2 c
    where t.a=c.字段1select @r as result
      

  4.   

    to gahade(沙果) :
    不可以改变原来tab1的值,而且字段1不一定是3个char,其长度是不大于10的char.
    to rea1gz(冒牌realgz V0.3) 
    我只是举例,实际上是有10项,这样union all起来有点不好吧。
      

  5.   

    不可以改变原来tab1的值,而且字段1不一定是3个char,其长度是不大于10的char.
    -----------------------------------------------------------------------
    那你就加上
    alter table tab1 add 字段11 char(30)
    alter table tab1 add 字段22 char(30)
    --调用
    select dbo.uf_returnstr(字段11,字段22) from tab1和有几项没关系.都可以