我有一个表如下:Group_ID            Favorite                              Name
          1         pingpang                            xiao li
          1         football                            xiao wang
          2         basketball                          xiao zhang
          2         basketball                          xiao liu我想用个select语句之后变成如下输出:
Group_ID            Favorite                              Name
          1        pingpang,football            xiao li,xiao wang
          2        basketball                   xiao zhang,xiao liu要怎么样写啊,谢谢!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    -- =========================================
    -- -----------t_mac 小编-------------
       ---希望有天成为大虾---- 
    -- =========================================IF OBJECT_ID('tb') IS NOT NULL
      DROP TABLE tb
    GO
    CREATE TABLE tb(a int,b varchar(10),c varchar(40))
    go
    insert tb SELECT 
              1  ,      'pingpang'    ,                       'xiao li' UNION ALL SELECT 
              1  ,      'football'     ,                       'xiao wang' UNION ALL SELECT 
              2  ,      'basketball'   ,                       'xiao zhang' UNION ALL SELECT 
              2  ,      'basketball'  ,                        'xiao liu' 
    go
    CREATE FUNCTION dbo.f_tb1(@id int) 
    RETURNS varchar(8000) 
    AS 
    BEGIN 
        DECLARE @str varchar(8000) 
        SET @str = '' 
        SELECT @str = @str + ',' + b FROM tb WHERE a=@id 
        RETURN STUFF(@str, 1, 1, '') 
    END 
    GO 
    CREATE FUNCTION dbo.f_tb2(@id int) 
    RETURNS varchar(8000) 
    AS 
    BEGIN 
        DECLARE @str varchar(8000) 
        SET @str = '' 
        SELECT @str = @str + ',' + c FROM tb WHERE a=@id 
        RETURN STUFF(@str, 1, 1, '') 
    END 
    GO SELECT a, b = dbo.f_tb1(a),c= dbo.f_tb2(a)FROM tb GROUP BY a 
    go
    /*------------
    a           b                                                                                                                                                                                                                                                                c
    ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1           pingpang,football                                                                                                                                                                                                                                                xiao li,xiao wang
    2           basketball,basketball                                                                                                                                                                                                                                            xiao zhang,xiao liu(2 行受影响)
    -------*/
      

  2.   

    ----------------------------------------------------------/*
    标题:按某字段合并字符串之一(简单合并)
    作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
    时间:2008-11-06
    地点:广东深圳描述:将如下形式的数据按id字段合并value字段。
    id    value
    ----- ------
    1     aa
    1     bb
    2     aaa
    2     bbb
    2     ccc
    需要得到结果:
    id     value
    ------ -----------
    1      aa,bb
    2      aaa,bbb,ccc
    即:group by id, 求 value 的和(字符串相加)
    */
    --1、sql2000中只能用自定义的函数解决
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    gocreate function dbo.f_str(@id int) returns varchar(100)
    as
    begin
        declare @str varchar(1000)
        set @str = ''
        select @str = @str + ',' + cast(value as varchar) from tb where id = @id
        set @str = right(@str , len(@str) - 1)
        return @str
    end
    go--调用函数
    select id , value = dbo.f_str(id) from tb group by iddrop function dbo.f_str
    drop table tb------------------------------------------------
    --调用函数
    select id , value = dbo.f_str(id) from tb group by id--2、sql2005中的方法
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    goselect id, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '')
    from tb
    group by iddrop table tb
    --3、使用游标合并数据
    create table tb(id int, value varchar(10))
    insert into tb values(1, 'aa')
    insert into tb values(1, 'bb')
    insert into tb values(2, 'aaa')
    insert into tb values(2, 'bbb')
    insert into tb values(2, 'ccc')
    go
    declare @t table(id int,value varchar(100))--定义结果集表变量
    --定义游标并进行合并处理
    declare my_cursor cursor local for
    select id , value from tb
    declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
    open my_cursor
    fetch my_cursor into @id , @value
    select @id_old = @id , @s=''
    while @@FETCH_STATUS = 0
    begin
        if @id = @id_old
           select @s = @s + ',' + cast(@value as varchar)
        else
          begin
            insert @t values(@id_old , stuff(@s,1,1,''))
            select @s = ',' + cast(@value as varchar) , @id_old = @id
          end
        fetch my_cursor into @id , @value
    END
    insert @t values(@id_old , stuff(@s,1,1,''))
    close my_cursor
    deallocate my_cursorselect * from @t
    drop table tb---------------------------------------------------
      

  3.   

    几千行不多,基本思路是创建函数。
    create function GetFavourites(@groupid int)
    returns varchar(max)
    as
      declare curF cursor for select distinct Favorite from tb where Group_ID=@groupid
      declare @fName varchar(50),@result varchar(max)
      
      fetch next from curF into @fName  select @result=@fName
      while @@fetch_status=0
    begin
      select @result=@result+','+@fName
      fetch next from curF into @fName
    endclose curF
    deallocate curF
    return @result
         
    类似创建函数GetNames最后使用语句:select group_id, GetFavourites(group_id) as Favorite, GetNames (group_id) as Name 
      from tb order by group_id