Sql Server:多行合并成一行,并做分组统计的两个方法
2022-11-12 09:45:05
内容摘要
这篇文章主要为大家详细介绍了Sql Server:多行合并成一行,并做分组统计的两个方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
代码如下
文章正文
这篇文章主要为大家详细介绍了Sql Server:多行合并成一行,并做分组统计的两个方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <code>--创建 test 表 ,插入数据 CREATE TABLE test(code varchar(50), [values] varchar(10),[ count ] int) INSERT test SELECT '001' , 'aa' ,1 UNION ALL SELECT '001' , 'bb' ,2 UNION ALL SELECT '002' , 'aaa' ,4 UNION ALL SELECT '002' , 'bbb' ,5 UNION ALL SELECT '002' , 'ccc' ,3; --方法一 --将多行合并成一行,并做分组统计 SELECT code, [values] = stuff(b.[values].value( '/R[1]' , 'nvarchar(max)' ), , , '' ),[ count ] FROM (SELECT code,sum([ count ]) as [ count ] FROM test GROUP BY code) a CROSS apply ( SELECT [values] =( SELECT N ',' + [values] FROM test WHERE code = a.code FOR XML PATH( '' ), ROOT( 'R' ), TYPE ) ) b; --方法二 ---SQL2005中的新解法 使用XML SELECT code, data=STUFF((SELECT ',' +[values] FROM test t WHERE code=t1.code FOR XML PATH( '' )), 1, 1, '' ),sum([ count ]) as [ count ] FROM test t1 GROUP BY code --查询结果 --001 aa,bb 3 --002 aaa,bbb,ccc 12 drop table test </code> |
注:关于Sql Server:多行合并成一行,并做分组统计的两个方法的内容就先介绍到这里,更多相关文章的可以留意
代码注释