ホームページ >データベース >mysql チュートリアル >SQL Serverのグループ内で句を効率的に連結するにはどうすればよいですか?

SQL Serverのグループ内で句を効率的に連結するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-25 02:17:08379ブラウズ

How Can I Efficiently Concatenate Strings within SQL Server's GROUP BY Clause?

SQL Serverの

内で、GROUP BYストリンクの連結を合理化します このガイドは、SQL Serverの

句内で文字列を連結する簡潔な方法を示しており、カーソルやループなどの効率の低い手法を回避します。 目標は、次のようなデータを変換することです:

GROUP BY 次の形式に

<code class="language-sql">id | Name | Value
---|-----|------
1  | A    | 4
1  | B    | 8
2  | C    | 9</code>

このソリューションは、
<code class="language-sql">id | Column
---|-------
1  | A:4, B:8
2  | C:9</code>

の強力な組み合わせを利用します。 このアプローチは効率的であり、SQL Server 2005以降のバージョンで機能します。 FOR XML PATHこれがSQLクエリです:STUFF

内側

ステートメントは、
<code class="language-sql">CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT);

INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4);
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8);
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9);

SELECT 
  [ID],
  STUFF((
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''), TYPE
  ).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, '') AS NameValues
FROM #YourTable Results
GROUP BY ID;

DROP TABLE #YourTable;</code>
を使用して連結された文字列を構築し、xml表現を作成し、

を使用して文字列に戻します。 SELECT関数は、初期のコンマとスペースをエレガントに削除します。 この方法は、反復アプローチのパフォーマンスオーバーヘッドを回避します

以上がSQL Serverのグループ内で句を効率的に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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