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

SQLで複数の行を単一の文字列に連結するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-01 12:19:10333ブラウズ

How to Concatenate Multiple Rows into a Single String in SQL?

ID に基づいた値の連結

データ操作では、多くの場合、複数の行のデータを 1 つの文字列に結合する必要があります。これは、文字列が小さなフラグメントから組み立てられる連結によって実現できます。

問題ステートメント:

2 つの列を持つ「Results」というテーブルがあります。 Response_ID」と「ラベル」。各「Response_ID」は複数の「Label」値に対応します。目標は、「Response_ID」ごとに 1 行の新しいテーブルを生成し、すべての「Label」値をカンマで区切って 1 つの文字列に連結することです。

解決策:

「Response_ID」に基づいて値を連結するには、次の SQL を使用できます。クエリ:

select T1.Response_ID,
       stuff((select ','+T2.Label
              from Results as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from Results as T1
group by T1.Response_ID

説明:

  • T1.Response_ID: 元のテーブルの "Response_ID" 列。
  • スタッフ():この関数は文字列を連結します。次の引数を受け取ります:

    • 連結される結果の文字列 (括弧内)。
    • 連結が開始される結果の文字列の開始位置 (この場合は 1)。
    • 結果の文字列の先頭から削除される部分文字列の長さ (この場合は 1) case).
    • 連結される文字列。
  • XML パス: このサブクエリは、連結プロセス用の XML フラグメントを生成します。各「ラベル」値は、カンマ区切りの XML 要素でラップされます。
  • value(): この関数は、XML フラグメントから連結された文字列を抽出します。

例:

次のように考えます。 table:

Response_ID Label
12147 It was not clear
12458 Did not Understand
12458 Was not resolved
12458 Did not communicate
12586 Spoke too fast
12587 Too slow

上記のクエリは次の出力を生成します:

Response_ID Label
12147 It was not clear
12458 Did not Understand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too slow

注: 連結された文字列の順序は、常に予測できるとは限りません。順序を正確に制御するには、サブクエリで「ORDER BY」ステートメントを使用できます。

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

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