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

SQL中联合多行记录的措施总汇: –1. 成立表,加多测量试验数据 CREATE TABLE
tb(id int, [value] varchar(10)) INSERT tb 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 tb /**//* id value ———–
———- 1 aa 1 bb 2 aaa 2 bbb 2 ccc (5 row(s) affected) */ –2
在SQL贰零零肆只能用自定义函数完毕
—-2.1
创设合併函数fn_strSum,根据id合并value值 GO CREATE FUNCTION
dbo.fn_strSum(@id int卡塔尔 RETUCRUISERNS varchar(8000卡塔尔 AS BEGIN DECLARE @values
varchar(8000卡塔尔国 SET @values = ” SELECT @values = @values + ‘,’ + value
FROM tb WHERE id=@id RETUTucsonN STUFF(@values, 1, 1, ”卡塔尔国 END GO — 调用函数
SELECT id, VALUE = dbo.fn_strSum(id) FROM tb GROUP BY id DROP FUNCTION
dbo.fn_strSum —-2.2 创造合併函数fn_strSum2,根据id合并value值 GO
CREATE FUNCTION dbo.fn_strSum2(@id int) RETURNS varchar(8000) AS BEGIN
DECLARE @values varchar(8000) SELECT @values = isnull(@values + ‘,’, ”)

 

  • value FROM tb WHERE id=@id RETURubiconN @values END GO — 调用函数 SELECT
    id, VALUE = dbo.fn_strSum2(id) FROM tb GROUP BY id DROP FUNCTION
    dbo.fn_strSum2 –3 在SQL贰零零陆/SQL2010中的新解法 —-3.1 使用OUTE君越 APPLY
    SELECT * FROM (SELECT DISTINCT id FROM tb) A OUTER APPLY( SELECT
    [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM tb N WHERE id =
    A.id FOR XML AUTO ), ‘N value=”‘, ‘,’), ‘”/’, ”), 1, 1, ”) )N —-3.2
    使用XML SELECT id, [values]=STUFF((SELECT ‘,’+[value] FROM tb t
    WHERE id=tb.id FOPRADO XML PATH(”卡塔尔卡塔尔国, 1, 1, ”卡塔尔国 FROM tb GROUP BY id –4
    删除测验表tb drop table tb /**//* id values ———–
    ——————– 1 aa,bb 2 aaa,bbb,ccc (2 row(s) affected) */

难点叙述:

任凭在sql
2004, 依旧在 sql 二〇〇六中,都还未有提供字符串的聚合函数,
所以, 当我们在拍卖下列供给时,会比较麻烦:

 

有表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

 


调用函数