ホームページ >データベース >mysql チュートリアル >SQL Server の STUFF 関数と FOR XML PATH 句を組み合わせてグループ内の文字列を連結するにはどうすればよいですか?

SQL Server の STUFF 関数と FOR XML PATH 句を組み合わせてグループ内の文字列を連結するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-22 22:59:11995ブラウズ

How can SQL Server's STUFF function and FOR XML PATH clause be used together to concatenate strings within a group?

SQL Server: グループ化された文字列連結のための STUFF と FOR XML PATH の組み合わせ

このガイドでは、SQL Server の STUFF 関数と FOR XML PATH 句を一緒に使用して、グループ内の文字列を効率的に連結する方法について説明します。

コンポーネントの理解:

  1. FOR XML PATH(''): この句はクエリ結果を XML 形式に変換します。 '' 引数として空の文字列 (PATH) を使用すると、指定された列から値のカンマ区切りのリストが生成され、XML タグで囲まれます。 例:

    <code class="language-sql">SELECT ',' + name FROM temp1 FOR XML PATH('')</code>

    これは次のように出力します: ,aaa,bbb,ccc,ddd,eee

  2. STUFF 関数: STUFF 関数は、文字列の一部を置換して文字列を変更します。 ここでは、FOR XML PATH('') によって生成された先頭のコンマを削除するために使用します。 関数のパラメータは次のとおりです:

    • 元の文字列。
    • 交代の開始位置。
    • 削除する文字数。
    • 置換文字列。

    したがって、STUFF((SELECT ',' NAME FROM temp1 FOR XML PATH('')), 1, 1, '') は最初のコンマを削除し、次のようになります: aaa,bbb,ccc,ddd,eee

  3. 結合とグループ化: 最後のクエリは、ID 列を使用して連結された文字列を元のテーブルに結合し、結果をグループ化して目的の出力を実現します:

    <code class="language-sql">SELECT ID, abc = STUFF(
                 (SELECT ',' + name
                  FROM temp1 t1
                  WHERE t1.id = t2.id
                  FOR XML PATH('')), 1, 1, '')
    FROM temp1 t2
    GROUP BY id;</code>

これにより、次のような結果セットが生成されます。

Id abc
1 aaa,bbb,ccc,ddd,eee

この方法は、SQL Server のグループ内の文字列を連結するための簡潔かつ効果的な方法を提供し、より複雑なテクニックの必要性を回避します。

以上がSQL Server の STUFF 関数と FOR XML PATH 句を組み合わせてグループ内の文字列を連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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