ホームページ > データベース > mysql チュートリアル > SQL Server の複数の行を単一のカンマ区切り列に結合するにはどうすればよいですか?

SQL Server の複数の行を単一のカンマ区切り列に結合するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-21 07:02:36
オリジナル
1028 人が閲覧しました

How to Combine Multiple SQL Server Rows into a Single Comma-Delimited Column?

SQL Server で複数の行をカンマ区切り値の 1 つの列に結合します

質問:

共通の識別子を持つ複数の行を 1 つの列に結合する必要があります。値はカンマで区切られます。たとえば、次の場所からデータを取得したいとします。

<code>[TicketID]  [Person]
T0001       Alice
T0001       Bob
T0002       Catherine
T0002       Doug
T0003       Elaine</code>
ログイン後にコピー

に変換:

<code>[TicketID]  [People]
T0001       Alice, Bob
T0002       Catherine, Doug
T0003       Elaine</code>
ログイン後にコピー

SQL Server 2005 のソリューション:

  1. STUFF 関数を使用して値を単一の文字列に結合します:
<code class="language-sql">STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '')</code>
ログイン後にコピー
  1. FOR XML PATH 句は値をグループ化し、XML 文字列として返します。
  2. TYPE 句は、結果がテキスト文字列であることを指定します。
  3. value 関数は、XML 文字列からテキストを抽出します。
  4. ISNULL 関数は、結合する値がない場合を処理します。
  5. 最後の STUFF 関数は、結合された文字列から先頭のカンマが存在する場合はそれを削除します。

クエリの例:

<code class="language-sql">SELECT t.TicketID,
       STUFF(ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), ''), 1, 2, '') [无前导逗号],
       ISNULL((SELECT ', ' + x.Person
                FROM @Tickets x
               WHERE x.TicketID = t.TicketID
            GROUP BY x.Person
             FOR XML PATH (''), TYPE).value('.','VARCHAR(max)'), '') [如果非空则有前导逗号]
  FROM @Tickets t
GROUP BY t.TicketID</code>
ログイン後にコピー

以上がSQL Server の複数の行を単一のカンマ区切り列に結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート