SQL Server で ID が重複する場合、「STUFF」 と 「FOR XML PATH」 はどのように名前を連結しますか?
Jan 22, 2025 pm 10:52 PMSQL Server: STUFF と FOR XML PATH を使用した重複 ID の名前の連結
このガイドでは、SQL Server テーブル内の重複 ID に関連付けられた複数の名前を連結し、一意の ID ごとにカンマ区切りの名前のリストを作成する方法を説明します。 STUFF
と FOR XML PATH
の強力な組み合わせを使用してこれを実現します。
シナリオ:
重複した ID と対応する名前を持つテーブルを想像してください。 目標は、各 ID のすべての名前をカンマできちんと区切って含む新しい列を作成することです。
解決策:
このソリューションでは、次の 3 段階のプロセスが採用されています。
ステップ 1: カンマ区切りの XML 文字列を生成する
ソリューションの中核は、FOR XML PATH('')
を利用して名前からカンマ区切りの文字列を生成することにあります。
SELECT ',' + name FROM temp1 FOR XML PATH('')
これにより、各名前の前にカンマが付いている XML 文字列が生成されます。
ステップ 2: 先頭のカンマを削除する
ステップ 1 から得られる XML 文字列は、不要なカンマで始まります。 STUFF
はこれをエレガントに削除します。
STUFF( (SELECT ',' + name FROM temp1 FOR XML PATH('')), 1, 1, '' )
STUFF
は、最初の文字 (先頭のカンマ) を空の文字列に置き換えます。
ステップ 3: 参加、グループ化、および最終結果
最後に、上記の手順を JOIN
句と GROUP BY
句と組み合わせて、目的の結果を実現します。
SELECT ID, ConcatenatedNames = STUFF( (SELECT ',' + name FROM temp1 t1 WHERE t1.id = t2.id FOR XML PATH ('')) , 1, 1, '') FROM temp1 t2 GROUP BY id;
このクエリは、temp1
に基づいてサブクエリ (カンマ区切り文字列を生成する) を元のテーブル (ID
) に結合します。 GROUP BY
句により、一意の ID ごとに連結が確実に行われます。 結果の ConcatenatedNames
列には、各 ID の名前のカンマ区切りリストが含まれます。
以上がSQL Server で ID が重複する場合、「STUFF」 と 「FOR XML PATH」 はどのように名前を連結しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?
