ホームページ >データベース >mysql チュートリアル >T-SQL で複数のレビュー担当者の名を単一のカンマ区切り文字列に連結するにはどうすればよいですか?

T-SQL で複数のレビュー担当者の名を単一のカンマ区切り文字列に連結するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-15 07:54:43401ブラウズ

How to Concatenate Multiple Reviewers' First Names into a Single Comma-Separated String in T-SQL?

T-SQL の複数のレコード フィールドの組み合わせ

T-SQL では、別のフィールドに基づいて複数のレコードのフィールドをグループ化することが必要になることがよくあります。次のシナリオを考えてみましょう:

レビューレビュー担当者、および ユーザーの 3 つのテーブルがあります。 Reviews テーブルには、ReviewIDReviewDate が含まれています。 Reviewers テーブルには、ReviewerIDReviewID、および UserID が含まれます。最後に、Users テーブルには、UserIDFName、および LName が含まれています。

チャレンジ:

レビューのリストを表示したいとします。各レビューには、対応するレビュー日と、そのレビューに関連付けられたすべてのレビュー担当者の名前のカンマ区切りリストが含まれます。目的の出力は次のようになります:

<code>ReviewID---ReviewDate----Users
----------------------------
1----------12/1/2009-----Bob, Joe, Frank
2----------12/9/2009-----Sue, Alice</code>

の代わりに:

<code>ReviewID---ReviewDate---User
----------------------------
1----------12/1/2009----Bob
1----------12/1/2009----Joe
1----------12/1/2009----Frank
2----------12/9/2009----Sue
2----------12/9/2009----Alice</code>

解決策:

この問題を解決する 1 つの方法は、FOR XML PATH('') メソッドを使用することです:

<code class="language-sql">SELECT  *,
        ( 
            SELECT  u.FName + ','
            FROM    @Users u INNER JOIN 
                    @Reviewers rs ON u.UserID = rs.UserID
            WHERE   rs.ReviewID = r.ReviewID
            FOR XML PATH('')
        ) AS Users
FROM    @Reviews r</code>

クエリの内訳は次のとおりです:

  • 行 1: Reviews テーブルから必要な列を選択します: ReviewIDReviewDate

  • 行 4 ~ 9: サブクエリを使用して、各コメントの名前のカンマ区切りリストを取得します。

    • サブクエリは、UserID に基づいて Users テーブルと Reviewers テーブルを結合します。
    • FName 列を選択し、各名前の後にカンマを連結します。
    • FOR XML PATH('') セクションは、結果を 1 つの文字列に集約します。
  • 行 10: サブクエリの結果には、Users というエイリアスが付けられます。

この改訂された出力はエイリアスを明確にし、読みやすさを向上させます。コア機能は変わらず、レビュー担当者の名をカンマ区切りの文字列に効率的に連結します。

以上がT-SQL で複数のレビュー担当者の名を単一のカンマ区切り文字列に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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