Sql Server:多行合并成一行,并做分组统计的两个方法
2015-03-10 16:13
363 查看
--创建 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
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
相关文章推荐
- Sql Server:多行合并成一行,并做分组统计的两个方法
- Sql Server:多行合并成一行,并做分组统计的两个方法
- Sql Server:多行合并成一行,并做分组统计的两个方法
- Sql Server:多行合并成一行,并做分组统计
- Sql Server:多行合并成一行,并做分组统计
- Oracle按时间分组统计的sql与oracle 多行合并一行
- 关于两个List表的合并后排重统计
- Sql Server里巧用Case将多行显示的数据合并为一行显示
- MSSQL2005中将多行合并为一行的方法,此方法不再使用sql2000中函数转换的办法
- Sql Server实用操作-更改数据库中表的所属用户的两个方法
- MS-SQL SERVER单列合并的四种常用方法--【叶子】
- (转)关于SQL Server 中合并行的方法
- Path.Combine (合并两个路径字符串)方法的一些使用细节
- SQL Server中按照时间进行分组统计
- SQL Server 分组及连接组内字符串的几种方法
- 有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并 (按字母顺序排列), 输出到一个新文件C中
- SQL Server中的按月进行统计的方法
- 分组统计方法:用GroupBy
- SQL Server 中统计各用户表记录条数 的两种方法
- Path.Combine (合并两个路径字符串)方法的一些使用细节