Maison >base de données >tutoriel mysql >Comment puis-je concaténer efficacement des chaînes de plusieurs lignes dans SQL Azure ?

Comment puis-je concaténer efficacement des chaînes de plusieurs lignes dans SQL Azure ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-20 08:56:09357parcourir

How Can I Efficiently Concatenate Strings from Multiple Rows in SQL Azure?

Optimisation de l'agrégation de chaînes dans SQL Azure

Combiner efficacement des chaînes de plusieurs lignes en une seule ligne est une tâche fréquente de manipulation de données. Même si certaines méthodes d'agrégation s'avèrent inadéquates, des solutions optimales existent pour surmonter ce défi.

La meilleure approche pour SQL Azure

Le manque de fonctions d'agrégation définies par le CLR dans SQL Azure nécessite des stratégies alternatives. L'approche Transact-SQL suivante fournit une solution efficace :

<code class="language-sql">WITH Partitioned AS (
    SELECT 
        ID,
        Name,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber,
        COUNT(*) OVER (PARTITION BY ID) AS NameCount
    FROM dbo.SourceTable
),
Concatenated AS (
    SELECT 
        ID, 
        CAST(Name AS nvarchar(max)) AS FullName, 
        Name, 
        NameNumber, 
        NameCount 
    FROM Partitioned 
    WHERE NameNumber = 1
    UNION ALL
    SELECT 
        P.ID, 
        CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), 
        P.Name, 
        P.NameNumber, 
        P.NameCount
    FROM Partitioned AS P
        INNER JOIN Concatenated AS C 
                ON P.ID = C.ID 
                AND P.NameNumber = C.NameNumber + 1
)
SELECT 
    ID,
    FullName
FROM Concatenated
WHERE NameNumber = NameCount;</code>

Explication détaillée :

Cette solution utilise un processus en trois parties :

  1. Numérotation des lignes : Attribue un numéro unique à chaque ligne de chaque ID partition, classé par ordre alphabétique par Name, en utilisant ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name).
  2. Concaténation récursive : Une expression de table commune (CTE) récursive ajoute de manière itérative Name valeurs en fonction des numéros de ligne attribués.
  3. Sélection finale : Filtre les résultats pour conserver uniquement les lignes avec le NameNumber le plus élevé dans chaque partition, produisant une seule chaîne concaténée par ID.

Remarque : Cette requête suppose un regroupement par ID et par ordre alphabétique croissant des chaînes. Des adaptations peuvent être nécessaires en fonction de votre structure de données et de vos exigences spécifiques. Le nvarchar(max) cast garantit une longueur de chaîne suffisante pour de grands résultats concaténés.

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!

Déclaration:
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