手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQL 合并多行记录的方法总汇
SQL 合并多行记录的方法总汇
摘要:--1.创建表,添加测试数据CREATETABLEtb(idint,[value]varchar(10))INSERTtbSELECT1,'...

--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 在SQL2000只能用自定义函数实现

----2.1 创建合并函数fn_strSum,根据id合并value值

GO

CREATE FUNCTION dbo.fn_strSum(@id int)

RETURNS varchar(8000)

AS

BEGIN

DECLARE @values varchar(8000)

SET @values = ''

SELECT @values = @values + ',' + value FROM tb WHERE id=@id

RETURN 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

RETURN @values

END

GO

-- 调用函数

SELECT id, VALUE = dbo.fn_strSum2(id) FROM tb GROUP BY id

DROP FUNCTION dbo.fn_strSum2

--3 在SQL2005/SQL2008中的新解法

----3.1 使用OUTER 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 FOR 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 合并多行记录的方法总汇】相关文章:

SQL Server使用一个语句块批量插入多条记录的三种方法

SQL Server2008中删除重复记录的方法分享

SQL 合并多行记录的方法总汇

SQL SERVER清除日志的方法

SQL SERVER 2008 R2 重建索引的方法

SQL查找某一条记录的方法

SQL Server2005 异地备份的多种方法

SQL Server 2005的cmd_shell组件的开启方法

远程连接SQLSERVER 2000服务器方法

SQL Server 2005 定时执行SQL语句的方法

精品推荐
分类导航