ホームページ >データベース >mysql チュートリアル >ユーザー定義の集計関数を使用して SQL Server でグループ化された値を連結する方法
ユーザー定義の集計関数を使用した 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 サイトの他の関連記事を参照してください。