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

来源:互联网 发布:软件验收测试报告 编辑:程序博客网 时间:2024/06/05 18:21

问题描述:

无论是在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.创建处理函数

CREATEFUNCTION dbo.f_str(@idint)

RETURNSvarchar(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

GROUPBY id

 

2. 新的解决方法

--示例数据

DECLARE @tTABLE(id int, valuevarchar(10))

INSERT @tSELECT 1, 'aa'

UNIONALL SELECT 1,'bb'

UNIONALL SELECT 2,'aaa'

UNIONALL SELECT 2,'bbb'

UNIONALL SELECT 2,'ccc'

 

--查询处理

SELECT*

FROM(

    SELECT DISTINCT

        id

    FROM @t

)A

OUTERAPPLY(

    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行受影响)

--*/

原创粉丝点击