Maison >base de données >tutoriel mysql >Comment combiner efficacement plusieurs lignes de sous-requête en un seul champ délimité dans SQL Server ?
Rationalisation de la manipulation des données SQL Server : combinaison de lignes de sous-requête en un seul champ délimité
Les tâches complexes de manipulation de données impliquent souvent l'écriture de code fastidieux, comme des solutions basées sur un curseur. Un défi courant consiste à combiner plusieurs lignes de sous-requête en un seul champ avec un délimiteur. Cet article présente des alternatives efficaces aux longues implémentations de curseurs.
Considérez deux tableaux, "Véhicules" et "Emplacements", où l'objectif est de consolider les noms de villes associés à chaque véhicule dans une seule colonne "Emplacements", séparés par des virgules. L'approche traditionnelle du curseur nécessite un codage approfondi.
SQL Server 2005 et versions ultérieures :
Une solution plus élégante utilise la commande FOR XML PATH
. Cela génère du XML à partir de la table « Emplacements », en séparant les noms de villes par des virgules, puis reconvertit le XML en chaîne de texte à l'aide de la fonction STUFF
:
<code class="language-sql">SELECT [VehicleID], [Name], (STUFF((SELECT ',' + [City] FROM [Location] WHERE (VehicleID = Vehicle.VehicleID) FOR XML PATH('')), 1, 1, '')) AS Locations FROM [Vehicle]</code>
SQL Server 2017 et versions ultérieures :
Pour des performances et une simplicité améliorées, SQL Server 2017 et les versions ultérieures proposent la fonction STRING_AGG
. Cette fonction regroupe directement les valeurs en une seule chaîne, en acceptant un séparateur comme deuxième paramètre :
<code class="language-sql">SELECT [VehicleID], [Name], (SELECT STRING_AGG([City], ', ') FROM [Location] WHERE VehicleID = V.VehicleID) AS Locations FROM [Vehicle] V</code>
Les deux méthodes combinent efficacement plusieurs lignes de sous-requêtes en un seul champ délimité, offrant des améliorations significatives par rapport aux approches basées sur le curseur, ce qui se traduit par un code plus propre et plus efficace et un temps de développement réduit. Choisissez la méthode appropriée à votre version de SQL Server.
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!