Rationalisation de la concaténation de chaînes dans la clause GROUP BY
de SQL Server
Ce guide présente une méthode concise pour concaténer des chaînes dans une clause GROUP BY
dans SQL Server, en évitant les techniques moins efficaces comme les curseurs ou les boucles. Le but est de transformer les données comme ceci :
<code class="language-sql">id | Name | Value ---|-----|------ 1 | A | 4 1 | B | 8 2 | C | 9</code>
au format suivant :
<code class="language-sql">id | Column ---|------- 1 | A:4, B:8 2 | C:9</code>
La solution utilise la puissante combinaison de FOR XML PATH
et STUFF
. Cette approche est efficace et fonctionne pour SQL Server 2005 et les versions ultérieures.
Voici la requête SQL :
<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>
L'instruction interne SELECT
construit la chaîne concaténée à l'aide de FOR XML PATH('')
, créant une représentation XML qui est ensuite reconvertie en chaîne à l'aide de .value()
. La fonction STUFF
supprime élégamment la virgule et l'espace initiaux. Cette méthode évite la surcharge de performances des approches itératives.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!