Sql Server:多行合并成一行,并做分组统计的两个

网络编程 2025-03-14 17:36www.168986.cn编程入门

方法一:使用 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;` 命令来完成。希望这两种方法能帮助到你!

上一篇:PHP转换文本框内容为HTML格式的方法 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by