ホームページ >データベース >mysql チュートリアル >SQL Server で ID が重複する場合、「STUFF」 と 「FOR XML PATH」 はどのように名前を連結しますか?

SQL Server で ID が重複する場合、「STUFF」 と 「FOR XML PATH」 はどのように名前を連結しますか?

DDD
DDDオリジナル
2025-01-22 22:52:141001ブラウズ

How Do `STUFF` and `FOR XML PATH` Concatenate Names in SQL Server for Duplicate IDs?

SQL Server: STUFF と FOR XML PATH を使用した重複 ID の名前の連結

このガイドでは、SQL Server テーブル内の重複 ID に関連付けられた複数の名前を連結し、一意の ID ごとにカンマ区切りの名前のリストを作成する方法を説明します。 STUFFFOR 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 サイトの他の関連記事を参照してください。

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