使用用户定义的聚合函数进行 SQL Server 字符串聚合
需要在 SQL Server 中连接组内的字符串,类似于 MySQL 的 GROUP_CONCAT
? SQL Server 2005 及更高版本没有内置等效项,需要更高级的解决方案。 用户定义的聚合函数(UDAF)提供了一种有效的方法。
考虑这个示例数据:
Id | Value |
---|---|
1 | 'A' |
1 | 'B' |
2 | 'C' |
目标是实现此输出:
Id | Value |
---|---|
1 | 'AB' |
2 | 'C' |
创建 UDAF
以下代码定义了一个名为AggregateConcat
的UDAF来执行每个组内的字符串连接:
<code class="language-sql">CREATE FUNCTION AggregateConcat (@id INT, @value VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @result VARCHAR(MAX) = ''; SELECT @result = @result + Value FROM TABLE_NAME WHERE Id = @id; RETURN @result; END;</code>
使用 UDAF
此函数可以像任何其他聚合函数一样在 SELECT
语句中使用:
<code class="language-sql">SELECT Id, dbo.AggregateConcat(Id, Value) AS ConcatenatedValue FROM TABLE_NAME GROUP BY Id;</code>
此查询按 Id
对数据进行分组,并应用 AggregateConcat
函数连接每个组的 Value
列,产生所需的结果。 请记住将 TABLE_NAME
替换为您的实际表名称。 这个简化版本避免了效率较低的基于游标的方法。 对于非常大的数据集,请考虑使用替代的、性能更高的方法,例如使用 STRING_AGG
(在 SQL Server 2017 及更高版本中可用)。
以上是如何使用用户定义的聚合函数连接 SQL Server 中的分组值?的详细内容。更多信息请关注PHP中文网其他相关文章!