SQL Server でのカンマ区切り文字列によるデータの集計
SQL Server の GROUP BY
句は、データの集計に優れています。 しかし、グループ化された行の複数の値を単一のカンマ区切りの文字列に結合するにはどうすればよいでしょうか?
課題:
次のようなテーブルを想像してください:
<code>ID ReportId Email 1 1 a@domain.com 2 2 b@domain.com 3 1 c@domain.com 4 3 d@domain.com 5 3 e@domain.com</code>
目標は、ReportId
でグループ化し、レポートごとに電子メールをカンマ区切りのリストに連結することです。
解決策: サブクエリと FOR XML PATH
サブクエリと FOR XML PATH
メソッドを使用してこれを実現する方法は次のとおりです。
<code class="language-sql">SELECT ReportId, Email = STUFF((SELECT ', ' + Email FROM table_name b WHERE b.ReportId = a.ReportId FOR XML PATH('')), 1, 2, '') FROM table_name a GROUP BY ReportId;</code>
説明:
SELECT
ステートメントは、特定の ReportId
に関連付けられたすべての電子メールを取得します。''
は、親ノードが作成されないことを保証します。STUFF
関数は、SELECT
ステートメントによって追加された先頭のカンマとスペースを削除し、きれいなカンマ区切りの文字列を生成します。結果:
クエリは次の出力を生成します:
<code>ReportId Email 1 a@domain.com, c@domain.com 2 b@domain.com 3 d@domain.com, e@domain.com</code>
これにより、複数の電子メール アドレスが各 ReportId
の単一のカンマ区切り文字列に効果的に統合されます。 このアプローチはうまく機能しますが、より効率的なソリューションを得るために、STRING_AGG
(SQL Server の新しいバージョンで利用可能) などの他のデータベース固有の関数を検討することを検討してください。
以上がSQL Server で GROUP BY を使用して複数の値をカンマ区切りの文字列に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。