Sql Server:多行合并成一行,并做分组统计的两个方法,需要的朋友可以参考一下
代码如下:
–创建 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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1802025.html