首頁 >資料庫 >mysql教程 >如何使用使用者定義的聚合函數連接 SQL Server 中的分組值?

如何使用使用者定義的聚合函數連接 SQL Server 中的分組值?

Patricia Arquette
Patricia Arquette原創
2025-01-09 12:37:55490瀏覽

How to Concatenate Grouped Values in SQL Server Using a User-Defined Aggregate Function?

使用使用者定義的聚合函數進行 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn