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 :
ID
partition, classé par ordre alphabétique par Name
, en utilisant ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name)
.Name
valeurs en fonction des numéros de ligne attribués.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!