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 ?

Comment combiner efficacement plusieurs lignes de sous-requête en un seul champ délimité dans SQL Server ?

DDD
Libérer: 2025-01-22 00:32:38
original
277 Les gens l'ont consulté

How to Efficiently Combine Multiple Subquery Rows into a Single Delimited Field in 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>
Copier après la connexion

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal