SQL 合并多行记录的方法总汇
发布时间:2020-12-12 09:36:35 所属栏目:MsSql教程 来源:网络整理
导读: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 t
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,'') 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="','),'"/>',''),'') )N ----3.2 使用XML SELECT id,[values]=STUFF((SELECT ','+[value] FROM tb t WHERE id=tb.id FOR XML PATH('')),'') FROM tb GROUP BY id --4 删除测试表tb drop table tb /*// id values ----------- -------------------- 1 aa,bb 2 aaa,bbb,ccc (2 row(s) affected) */ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |