Sql Server:多行合并成一行,并做分组统计
2013-02-21 09:43
330 查看
--创建 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)'),
1,
1,
''),[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)'),
1,
1,
''),[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 多行合并一行
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- oracle中分组后,把一组中一列的多行值合并成一行
- Sql Server 分组统计并合计总数
- sql server 分组统计
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- Sql Server里巧用Case将多行显示的数据合并为一行显示
- Sql Server 分组统计并合计总数及WITH ROLLUP应用
- sql server 分组统计数据
- sql server利用开窗函数over() 进行分组统计
- TSQL--按某字段列分组,在将各组中某列合并成一行
- Sql Server合并多行询数据到一行:使用自连接、FOR XML PATH('')、STUFF或REPLACE函数
- SQL Server查询提示(5):分组、合并提示
- sql server 2005 and above, 合并多行为一行,并返回
- sql server 把多行合并一行,并连接成一个字符串