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

IDに基づいて複数のラベルを単一の行に連結するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-30 21:52:10
オリジナル
799 人が閲覧しました

How to Concatenate Multiple Labels into a Single Row Based on ID?

ID に基づいた値の連結

この質問は、ID ごとに複数の行と単一の「ラベル」列を含むテーブルを、 ID ごとに 1 行と連結された「ラベル」列を持つテーブル。各ラベルはカンマで区切る必要があります。

提供されたデータは次の観測値で構成されています:

Response_ID Label
12147 It was not clear
12458 Did not Undersstand
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 Undersstand,Was not resolved,Did not communicate
12586 Spoke too fast
12587 Too Slow

この変換を実現するには、次のコード スニペットを使用できます:

declare @T table(Response_ID int, Label varchar(50))
insert into @T values
(12147,          'It was not clear'),
(12458,          'Did not Undersstand'),
(12458,          'Was not resolved'),
(12458,          'Did not communicate'),
(12586,          'Spoke too fast'),
(12587,          'Too slow')

select T1.Response_ID,
       stuff((select ','+T2.Label
              from @T as T2
              where T1.Response_ID = T2.Response_ID
              for xml path(''), type).value('.', 'varchar(max)'), 1, 1, '') as Label
from @T as T1
group by T1.Response_ID
ログイン後にコピー

「stuff」関数のサブクエリは次のコードを使用します。 ' ' 演算子と XML メソッドを使用して連結し、ラベルの組み合わせを処理します。 「type」パラメータの「value」関数は、XML 出力を varchar(max) タイプに変換して、連結結果が適切に表示されるようにします。

サブクエリに order by ステートメントがないと、連結された順序が正しく表示されないことに注意してください。文字列は保証できません。

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

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