由:
A1 A2  A3 A4    
11 苹果 9  优
22 栗子 10 良
33 香蕉 5  差
44 花生 3  优
55 桔子 11 良得到:
11 苹果 9  优,22 栗子 10 良,33 香蕉 5  差,44 花生 3  优,55 桔子 11 良

解决方案 »

  1.   

    DECLARE @SQL VARCHAR(1000);
    SET @SQL='';SELECT @SQL=@SQL+','+RTRIM(A1)+' '+A2+' '+RTRIM(A3)+' '+A4
    FROM tb_name;SET @SQL=STUFF(@SQL,1,1,'');SELECT @SQL;
      

  2.   

    问题描述:
    无论是在sql 2000,还是在 sql 2005 中,都没有提供字符串的聚合函数,
      所以,当我们在处理下列要求时,会比较麻烦:
    有表tb, 如下:
    id    value
    ----- ------
    1     aa
    1     bb
    2     aaa
    2     bbb
    2     ccc
    需要得到结果:
    id     values
    ------ -----------
    1      aa,bb
    2      aaa,bbb,ccc
    即, group by id, 求 value 的和(字符串相加)1. 旧的解决方法-- 1. 创建处理函数
    CREATE FUNCTION dbo.f_str(@id int)
    RETURNS varchar(8000)
    AS
    BEGIN
        DECLARE @r varchar(8000)
        SET @r = ''
        SELECT @r = @r + ',' + value
        FROM tb
        WHERE id=@id
        RETURN STUFF(@r, 1, 1, '')
    END
    GO
    -- 调用函数SELECt id, values=dbo.f_str(id) 
    FROM tb 
    GROUP BY id-- 2. 新的解决方法 
    -- 示例数据
    DECLARE @t TABLE(id int, value varchar(10))
    INSERT @t SELECT 1, 'aa'
    UNION ALL SELECT 1, 'bb'
    UNION ALL SELECT 2, 'aaa'
    UNION ALL SELECT 2, 'bbb'
    UNION ALL SELECT 2, 'ccc'-- 查询处理
    SELECT *
    FROM(
        SELECT DISTINCT 
            id
        FROM @t
    )A
    OUTER APPLY(
        SELECT 
            [values]= STUFF(REPLACE(REPLACE(
                (
                    SELECT value FROM @t N
                    WHERE id = A.id
                    FOR XML AUTO
                ), '<N value="', ','), '"/>', ''), 1, 1, '')
    )N/*--结果
    id          values
    ----------- ----------------
    1           aa,bb
    2           aaa,bbb,ccc
    (2 行受影响)
    --*/CSDN 社区帖子地址 附: 合并与分拆的CLR, sql2005的示例中有:
    在安装sql 2005的示例后,默认安装目录为
    drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities中
      

  3.   


    --这好象跟行转列无关吧?,这样?
    --> 测试数据: [s]
    if object_id('[s]') is not null drop table [s]
    create table [s] (A1 int,A2 varchar(4),A3 int,A4 varchar(2))
    insert into [s]
    select 11,'苹果',9,'优' union all
    select 22,'栗子',10,'良' union all
    select 33,'香蕉',5,'差' union all
    select 44,'花生',3,'优' union all
    select 55,'桔子',11,'良'
    declare @sql varchar(1000)
    select @sql=isnull(@sql+',','')+ltrim(A1)+' '+A2+' '+ltrim(A3)+' '+A4 from s
    select @sql
      

  4.   


    declare 
             @str varchar(1000)set @str=''
    select @str=@str+','+a1+a2+a3+a4 from tb
    select @str = right(@str,len(@str)-1)
    print @str
      

  5.   

    参照
    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html
      

  6.   

    declare @sql varchar(1000)
    select @sql=isnull(@sql+',','')+ltrim(A1)+' '+A2+' '+ltrim(A3)+' '+A4 from s
    select @sql
      

  7.   

    --> --> (Andy)生成测试数据 2008-10-07
    Set Nocount On
    declare @1 table([A1] int,[A2] nvarchar(2),[A3] int,[A4] nvarchar(1))
    Insert @1
    select 11,N'苹果',9,N'优' union all
    select 22,N'栗子',10,N'良' union all
    select 33,N'香蕉',5,N'差' union all
    select 44,N'花生',3,N'优' union all
    select 55,N'桔子',11,N'良'Select Stuff((Select ','+Rtrim(A1)+' '+Rtrim(A2)+' '+Rtrim(A3)+' '+Rtrim(A4) From @1 For Xml Path('')),1,1,'')
    /*
    11 苹果 9 优,22 栗子 10 良,33 香蕉 5 差,44 花生 3 优,55 桔子 11 良
    */