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
Libérer: 2025-01-20 08:56:09
original
314 Les gens l'ont consulté

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

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!

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