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