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

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

DDD
DDDオリジナル
2025-01-21 06:57:16354ブラウズ

How to Concatenate Multiple Rows into a Single Comma-Separated Column in SQL Server?

複数の SQL Server 行を単一のカンマ区切り列に結合する

このガイドでは、SQL Server 内でカンマ区切り値を使用して複数の行を 1 つの列に結合する方法を説明します。 このデータセットの例を使用してみましょう:

<code class="language-sql">[TicketID], [Person]
T0001       Alice
T0001       Bob
T0002       Catherine
T0002       Doug
T0003       Elaine</code>

私たちの目標は、次の出力を達成することです:

<code class="language-sql">[TicketID], [People]
T0001       Alice, Bob
T0002       Catherine, Doug
T0003       Elaine</code>

解決策 (SQL Server 2005 以降):

次の SQL クエリは、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, '') AS People
  FROM @Tickets t
GROUP BY t.TicketID;</code>

説明:

  • このソリューションは SQL Server 2005 以降のバージョンと互換性があります。
  • STUFF 関数は、文字列の一部を別の文字列に置き換えます。 ここでは、先頭のカンマを削除します。
  • FOR XML PATH 句はデータの XML 表現を構築し、.value('.','VARCHAR(max)') を使用してカンマ区切りの文字列に変換します。 これは、SQL Server の文字列集計の一般的な手法です。
  • ISNULL は、TicketID に関連付けられている人物が 1 人だけである場合を処理し、エラーを防ぎます。

この方法は、SQL Server で複数の行を単一のカンマ区切り列に連結するための簡潔で効果的なソリューションを提供します。 @Tickets を実際のテーブル名に置き換えることを忘れないでください。

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

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