Sql Server:多行合并成一行,并做分组统计的两个
方法一:使用 XML 和 STUFF 函数
```sql
CREATE TABLE test(code varchar(50), values varchar(10), count int);
INSERT INTO test VALUES ('001', 'aa', 1), ('001', 'bb', 2), ('002', 'aaa', 4), ('002', 'bbb', 5), ('002', 'c', 3);
-- 方法一:使用 XML 和 STUFF 函数合并行并进行分组统计
SELECT
code,
values = STUFF((
SELECT ',' + t.[values]
FROM test t
WHERE t.code = a.code
FOR XML PATH('')
), 1, 1, ''), -- 删除第一个逗号
SUM([count]) as total_count
FROM test a
GROUP BY code;
```
这个查询首先通过 `FOR XML PATH('')` 将相同 `code` 的 `values` 列合并为一个字符串,然后使用 `STUFF` 函数移除开头的逗号。通过 `GROUP BY` 对 `code` 进行分组并计算每组的总计数。
方法二:利用 SQL Server 2005 中的新特性
另一种方法是利用 SQL Server 2005 开始支持的新特性来实现这一功能:
```sql
-- 方法二:利用 SQL Server 2005 中的新特性进行合并和统计
SELECT
code,
data = STUFF((
SELECT ',' + t.[values] FROM test t WHERE code = t1.code FOR XML PATH('')
), 1, 1, ''),
SUM([count]) as [count]
FROM test t1
GROUP BY code;
```
这个查询与第一种方法类似,只是省略了中间步骤,直接使用 `STUFF` 函数处理合并后的字符串。结果仍然是将多行数据合并为单个字符串,并按 `code` 分组计算总计数。
查询结果的示例如下:
```yaml
code | data | count
--|-|
001 | aa,bb | 3 -- 表示 code 为 001 的行合并后的 values 和总计数
002 | aaa,bbb,c | 12 -- 表示 code 为 002 的行合并后的 values 和总计数
```如果需要删除 `test` 表,可以使用 `DROP TABLE test;` 命令来完成。希望这两种方法能帮助到你!
编程语言
- Sql Server:多行合并成一行,并做分组统计的两个
- PHP转换文本框内容为HTML格式的方法
- 使用vue.js实现checkbox的全选和多个的删除功能
- 微信小程序 配置顶部导航条标题颜色的实现方法
- php输出xml必须header的解决方法
- jquery制作LED 时钟特效
- sqlserver附加.mdf权限问题解决
- layui点击导航栏刷新tab页的示例代码
- Netbeans 8.2与PHP相关的新特性介绍
- bootstrapvalidator之API学习教程
- CodeIgniter采用config控制的多语言实现根据浏览器语
- coreseek 搜索英文的问题详解
- vue js秒转天数小时分钟秒的实例代码
- PHP中获取时间的下一周下个月的方法
- jQuery点缩略图弹出层显示大图片
- php 伪静态之IIS篇