Solution de connexion efficace pour les chaînes SQL Azure
Dans SQL Azure, il est essentiel d'agréger efficacement des données de chaîne disparates en une seule entité. En raison du manque de fonctions d'agrégation personnalisées CLR dans SQL Azure, des alternatives efficaces doivent être trouvées.
Solution Transact SQL
Un moyen efficace consiste à utiliser la clause WITH et le CTE (Common Table Expression) récursif. Cette méthode comprend :
Description
Veuillez considérer la demande suivante :
<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>
Exemple
Pour les données suivantes :
<code>ID Name ------- -------- 1 Matt 1 Rocks 2 Stylus 3 Foo 3 Bar 3 Baz</code>
Renvoie les résultats globaux suivants :
<code>ID FullName ------- --------------------- 1 Matt, Rocks 2 Stylus 3 Foo, Bar, Baz</code>
Avantages
Remarque : afin d'éviter le dépassement de longueur du type de données nvarchar, modifiez le type de CAST en nvarchar(max). De plus, le tri dans les résultats de l'exemple est légèrement différent du texte original. En effet, la base de tri de ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) est le champ Nom, ce qui entraîne des différences dans les résultats de tri. Si vous avez besoin d'une méthode de tri spécifique, modifiez la clause ORDER BY.
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!