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