ホームページ >データベース >mysql チュートリアル >ユーザー定義の集計関数を使用して SQL Server でグループ化された値を連結する方法

ユーザー定義の集計関数を使用して SQL Server でグループ化された値を連結する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-09 12:37:55562ブラウズ

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

ユーザー定義の集計関数を使用した SQL Server 文字列集計

MySQL の GROUP_CONCAT と同様に、SQL Server のグループ内で文字列を連結する必要がありますか? 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。