ホームページ >データベース >mysql チュートリアル >SQL Server の GROUP BY と STUFF() を使用して ReportId によって電子メールを連結するにはどうすればよいですか?

SQL Server の GROUP BY と STUFF() を使用して ReportId によって電子メールを連結するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-10 17:38:41971ブラウズ

How to Concatenate Emails by ReportId Using SQL Server's GROUP BY and STUFF()?

SQL Server での電子メールの集約: GROUP BY および STUFF() ソリューション

SQL Server の GROUP BY 句は、データを要約するのに強力です。 頻繁に行われるタスクは、複数の行の値をカンマ区切りの 1 つの文字列に結合することです。 これは、STUFF().

のような関数を使用して効率的に処理されます。

サンプルの従業員レポート表を使って説明してみましょう:

ID ReportId Email
1 1 john@example.com
2 2 mary@example.com
3 1 jane@example.com
4 3 david@example.com
5 3 susan@example.com

カンマを区切り文字として使用して、各 ReportId に関連付けられたメールを連結するには、次のクエリが機能します。

<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() 関数は文字列を変更します。 文字列、開始位置、削除する文字数、置換文字列の 4 つの引数を取ります。

外側のクエリは ReportId によってグループ化されます。内部クエリでは、FOR XML PATH('') を使用して、各グループの電子メールを連結します。 STUFF() は、先頭のカンマとスペースを削除します。

クエリの出力:

ReportId Email
1 john@example.com, jane@example.com
2 mary@example.com
3 david@example.com, susan@example.com

以上がSQL Server の GROUP BY と STUFF() を使用して ReportId によって電子メールを連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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