SQL Server: 集計中に値をカンマで連結する
SQL Server では多くの場合、データを特定の列でグループ化し、関連する値を単一のカンマ区切り文字列に結合する必要があります。 これを例で説明してみましょう。 YourTable
という名前のテーブルに ID
と Value
という列があるとします。
<code>ID | Value -------|-------- 1 | a 1 | b 2 | c</code>
目標は、一意の各 ID
に、関連する Value
エントリの対応するカンマ区切り文字列が含まれる結果セットを生成することです。 これは、FOR XML PATH
メソッドを使用して実現できます。
<code class="language-sql">SELECT ID, STUFF((SELECT ', ' + Value FROM YourTable t2 WHERE t1.ID = t2.ID FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS Values FROM YourTable t1 GROUP BY ID;</code>
このクエリは次のように機能します:
SELECT
: これにより、ID
列が選択され、集計の準備が整います。SELECT
: これにより、外部クエリから現在の Value
に一致するすべての ID
エントリが取得されます。 ', ' Value
は、各値の前にカンマとスペースを追加します。FOR XML PATH('')
: これは、内部クエリの結果を XML 文字列に変換し、値を効果的に連結します。 空の文字列 ''
により、XML タグが生成されなくなります。.value('.', 'NVARCHAR(MAX)')
: これにより、XML から連結された文字列が抽出されます。STUFF(..., 1, 2, '')
: これにより、連結された文字列から先頭の「,」が削除されます。最終的な出力は次のようになります:
<code>ID | Values -------|-------- 1 | a, b 2 | c</code>
この手法は、SQL Server でカンマ区切り集計を実行するための簡潔かつ効率的な方法を提供します。
以上がFOR XML PATH を使用して SQL Server で値を集計およびカンマ区切りにする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。