create function getstr(@a int)
returns varchar(2000)
as 
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(b) from a where a=@a
set @str=right(@str,len(@str)-1)
return @str
end
go--语句:
select a,dbo.getstr(a) from a group by a

解决方案 »

  1.   

    To:大力 V3.0能不能不用function实现呢?谢!
      

  2.   

    --用临时表也可以:select *,aa=cast('' as varchar(8000)) into #t from 表a order by a
    delcare @a int,@b varchar(8000)
    update #t set @b=case @a when a then @b+','+b else b end
      ,aa=@b,@a=a
    select a,b=max(aa) from #t group by a
    dorp table #t
      

  3.   

    TO:zjcxc(邹建) 
    我怎么不行呀!!!急Drop Table #t
    Declare @t table (
    a int,
    b char(4)
    )Insert into @t Values(1,'a')
    Insert into @t Values(2,'b')
    Insert into @t Values(2,'c')
    Insert into @t Values(3,'d')
    Insert into @t Values(3,'e')
    Insert into @t Values(3,'f')select *,aa=cast('' as varchar(8000)) into #t from @t order by adeclare @a int,@b varchar(8000)update #t 
    set @b=
    case @a 
    when a 
    then @b+','+b 
    else b 
    end
      ,aa=@b,@a=aselect a,b=max(aa) from #t group by a
      

  4.   

    --数据类型的问题.
    Drop Table #tDeclare @t table (a int,b char(4))Insert into @t Values(1,'a')
    Insert into @t Values(2,'b')
    Insert into @t Values(2,'c')
    Insert into @t Values(3,'d')
    Insert into @t Values(3,'e')
    Insert into @t Values(3,'f')select *,aa=cast('' as varchar(8000)) into #t from @t order by adeclare @a int,@b varchar(8000)
    update #t 
    set @b=case @a when a then @b+','+rtrim(b) else rtrim(b) end
      ,aa=@b,@a=aselect a,b=max(aa) from #t group by a
      

  5.   

    因为你的b列是char,是固定长度的,所以要用rtrim(b)去掉尾部的空格.
      

  6.   

    SELECT DISTINCT t1.a, t2.b
    FROM a as t1 INNER JOIN
          a b t2 t1.a = t2.a