SQL Server の GROUP BY を使用して一意の値をカンマ区切りのリストに集約する
チャレンジ:
重複したエントリを持つテーブルの場合、目標は、データを特定の列でグループ化し、別の列の一意の値を単一のカンマ区切り文字列に統合することです。
サンプルデータ:
次の表は、初期データセットを示しています。
ID | ReportId | |
---|---|---|
1 | 1 | [email protected] |
2 | 2 | [email protected] |
3 | 1 | [email protected] |
4 | 3 | [email protected] |
5 | 3 | [email protected] |
ターゲット結果:
望ましい結果は、電子メール アドレスが統合されたテーブルです:
ReportId | |
---|---|
1 | [email protected], [email protected] |
2 | [email protected] |
3 | [email protected], [email protected] |
GROUP BY と STUFF を使用した解決策:
STUFF
関数は、文字列を効率的に連結し、先頭の文字を削除するために使用されます。 解決策は次のとおりです:
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM your_table b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM your_table a GROUP BY ReportId;</code>
詳細な説明:
コア ロジックには、STUFF
関数内のサブクエリが含まれます。このサブクエリは、外側のクエリの現在の行と同じ ReportId
を共有するすべての行を反復処理します。 一致する行ごとに、蓄積される文字列にコンマと Email
値が追加されます。 次に、外側のクエリは GROUP BY
を使用して、これらの連結された電子メール文字列を一意の ReportId
ごとに集計します。 STUFF
関数は、最初のカンマとスペースを削除します。
以上がSQL Server の GROUP BY を使用して一意の値をカンマ区切りの文字列に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。