SQL Server中 STRING_AGG是啥意思
以下内容摘自通义千问:
STRING_AGG 是 SQL Server 2017 及以上版本(以及部分其他数据库如 PostgreSQL)中提供的一个聚合函数,用于将多行文本值连接(拼接)成一个字符串,并用指定的分隔符隔开。
🔹 基本语法(SQL Server):
STRING_AGG ( expression, separator [ORDER BY order_expression] )
expression:要拼接的列或表达式(必须是字符串类型,如VARCHAR,NVARCHAR;非字符串需先转换)。separator:分隔符,例如','、'; '、' | '等。[ORDER BY ...](可选):指定拼接时的排序顺序。
⚠️ 注意:
STRING_AGG只能在GROUP BY查询中使用,因为它是一个聚合函数(类似SUM,COUNT,MAX)。
🔸 举个例子:
假设有如下数据表 Products:
| UserId | ProductName |
|---|---|
| 1 | Apple |
| 1 | Banana |
| 1 | Cherry |
| 2 | Orange |
执行以下查询:
SELECT
UserId,
STRING_AGG(ProductName, ', ') AS AllProducts
FROM Products
GROUP BY UserId;
结果将是:
| UserId | AllProducts |
|---|---|
| 1 | Apple, Banana, Cherry |
| 2 | Orange |
如果加上排序:
STRING_AGG(ProductName, ', ') WITHIN GROUP (ORDER BY ProductName DESC)
则 UserId=1 的结果会变成:Cherry, Banana, Apple
💡 在 SQL Server 中,
ORDER BY要写成WITHIN GROUP (ORDER BY ...)的形式。
🔹 在你原始查询中的作用:
STRING_AGG(Temp.ProductNames, ',') AS ProductNames
意思是:
把同一个用户(因
GROUP BY FullName, Email, IsSubscribed)对应的多个产品名称,用英文逗号,拼接成一个字符串。
例如:
- 用户 A 有产品 "Word", "Excel" → 拼成
"Word,Excel"
🔸 兼容性说明:
- ✅ 支持:SQL Server 2017+、Azure SQL Database、PostgreSQL、BigQuery 等。
- ❌ 不支持:SQL Server 2016 及更早版本。
→ 如果你在旧版 SQL Server 上运行,会报错:“'STRING_AGG' is not a recognized built-in function name”。
对于旧版 SQL Server,通常用
FOR XML PATH('')技巧模拟类似功能。
总结:
STRING_AGG 就是 “把多行变一行,用分隔符连起来” 的利器,特别适合生成标签列表、产品清单、权限列表等场景。
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/keeplearningandsharing/p/19518337
浙公网安备 33010602011771号