假设有一个表包含与唯一标识符关联的多个值,例如:
<code>+------------+ | Id | Value | +------------+ | 1 | 'A' | |------------| | 1 | 'B' | |------------| | 2 | 'C' | +------------+</code>
为了达到将具有相同Id的行合并到具有组合值的一行中的预期结果:
<code>+------------+ | Id | Value | +------------+ | 1 | 'AB' | |------------| | 2 | 'C' | +------------+</code>
在 SQL Server 2005 中,可以使用用户定义的聚合函数。此函数在其示例实现中提供,可以无缝地执行此串联任务。
<code class="language-sql">-- 创建用户定义的聚合函数 CREATE FUNCTION [dbo].[ConcatValues](@array VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @result VARCHAR(MAX) = ''; IF @array IS NOT NULL BEGIN SELECT @result = @result + value FROM STRING_SPLIT(@array, ','); END RETURN @result; END; -- 在查询中使用用户定义的聚合函数 SELECT Id, [dbo].[ConcatValues](STRING_AGG(Value, ',')) AS Value FROM TableName GROUP BY Id;</code>
通过此解决方案,您可以像使用任何其他标准聚合函数一样利用用户定义的聚合函数,从而可以将其无缝地合并到您的查询中。 请注意,STRING_SPLIT
函数在 SQL Server 2016 及更高版本中可用。对于 SQL Server 2005,您需要使用替代方法来拆分字符串,例如自定义函数或游标。 上面的代码已更新为使用 STRING_AGG
函数(SQL Server 2017 及更高版本),提供更清晰的解决方案。 对于 SQL Server 2005,您需要一个更复杂的自定义解决方案来模拟 STRING_AGG
和 STRING_SPLIT
的功能。
以上是如何在 SQL Server 2005 中连接分组值?的详细内容。更多信息请关注PHP中文网其他相关文章!