Maison > base de données > tutoriel mysql > Comment puis-je concaténer efficacement des chaînes dans la clause GROUP BY de SQL Server ?

Comment puis-je concaténer efficacement des chaînes dans la clause GROUP BY de SQL Server ?

Linda Hamilton
Libérer: 2025-01-25 02:17:08
original
407 Les gens l'ont consulté

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

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>
Copier après la connexion

au format suivant :

<code class="language-sql">id | Column
---|-------
1  | A:4, B:8
2  | C:9</code>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal