Méthode de concaténation de chaînes SQL Server
Description du problème :
Vous devez regrouper les chaînes de plusieurs lignes en une seule ligne. COALESCE et FOR XML ne feront pas ce dont vous avez besoin et Azure ne prend pas en charge les fonctions d'agrégation définies par le CLR. Vous devez rechercher la meilleure alternative.
Solution :
À l'aide du Transact SQL standard, vous pouvez concaténer des chaînes efficacement en suivant ces étapes :
Instructions :
Cette méthode utilise trois CTE :
Pour utiliser cette solution, vous devez préciser des critères de regroupement et de tri. Par exemple, dans votre cas, les lignes portant le même ID sont concaténées et triées par ordre alphabétique.
Exemple :
Considérez les données suivantes :
<code>ID Name -- -- 1 Matt 1 Rocks 2 Stylus 3 Foo 3 Bar 3 Baz</code>
La requête et sa sortie sont les suivantes :
<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>
<code>ID FullName -- ------------------------------ 2 Stylus 3 Bar, Baz, Foo 1 Matt, Rocks</code>
Description de l'amélioration : Remplacez le type nvarchar
par nvarchar(max)
pour prendre en charge des résultats de concaténation de chaînes plus longs. Cela évite les erreurs potentielles de dépassement de longueur de chaîne.
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!