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

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 在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 Server2005异地自动备份方法

SQL Server各种日期计算方法

批量执行sql语句的方法

SQL Server 2005 更改安装路径目录的方法小结

用SQL建立索引的方法步骤

SQL2000中改名和删除默认sa帐号的最安全方法

SQL查询日志 查看数据库历史查询记录的方法

五种提高 SQL 性能的方法

MSSQL 清空数据库的方法

SQL Server编写函数获取汉字的拼音码

精品推荐
分类导航