问题:一个表test,有2列:firstname varchar(50),domain varchar(50)。test表有如下数据行:firstname      domain----------------------tony              group1tony              group2tony              group3john              group4 提问:求一条sql,查询结果可以按如下格式显示:firstname             domain---------------------------tony                  group1,group2,group3john                  group4 谢谢

解决方案 »

  1.   

    --> 测试数据:[tbl]
    if object_id('[tbl]') is not null drop table [tbl]
    create table [tbl]([firstname] varchar(4),[domain] varchar(6))
    insert [tbl]
    select 'tony','group1' union all
    select 'tony','group2' union all
    select 'tony','group3' union all
    select 'john','group4'SELECT * FROM (SELECT DISTINCT [firstname] FROM [tbl])A
    OUTER APPLY(
        SELECT [domain]= STUFF(REPLACE(REPLACE(
                (   SELECT [domain] FROM [tbl] N
                    WHERE [firstname] = A.[firstname]
                    FOR XML AUTO
                 ), '<N domain="', ','), '"/>', ''), 1, 1, '')
    )N
    ORDER BY [domain]
    /*
    firstname domain
    tony group1,group2,group3
    john group4
    */
      

  2.   

    MSSQL2005及以上版本可以用STUFF函数。
      

  3.   

    create FUNCTION F_Suff 
    (
    @firstname varchar(20)
    )
    RETURNS varchar(8000) AS
     begin
     declare @s varchar(2000)
     set @s=''
     select @s=isnull(@s+',','')+domain from tb3
     where firstname=@firstname
     --return stuff(@s,1,1,'')
         return @s
    end
    GOselect firstname, dbo.F_Suff(firstname) as c
    from tb3
    group by firstname