(转载)SQL 2005 当我们想将某个字段相同的几行数据合并为一列显示的时候 合并列值

来源:互联网 发布:淘宝消费者服务热线 编辑:程序博客网 时间:2024/04/30 05:10
(转载)SQL 2005 当我们想将某个字段相同的几行数据合并为一列显示的时候 合并列值

问题描述:

无论是在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)ASBEGIN    DECLARE @r varchar(8000)    SET @r = ''    SELECT @r = @r + ',' + value    FROM tb    WHERE id=@id    RETURN STUFF(@r, 1, 1, '')ENDGO-- 调用函数SELECt id, values=dbo.f_str(id)FROM tbGROUP 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行受影响)

--*/

 

原创粉丝点击