SQL Server fusionne plusieurs lignes de texte en une seule chaîne
Dans divers scénarios de base de données, vous devrez peut-être combiner les valeurs de chaîne de plusieurs lignes en une seule chaîne cohérente. Ceci est particulièrement utile lorsque vous devez combiner des informations provenant de différents points de données dans un résumé ou un affichage complet.
Énoncé du problème
Considérons un tableau appelé « Noms » qui contient les trois lignes suivantes :
Défi
Le but est de convertir ces lignes individuelles en une seule chaîne séparée par des virgules : "Pierre, Paul, Marie".
Solution
Dans SQL Server 2017 et Azure SQL Database, vous pouvez utiliser la fonction STRING_AGG() pour accomplir cette tâche. La syntaxe de STRING_AGG() est la suivante :
<code class="language-sql">STRING_AGG(<expression> [ , delimiter ] [ ORDER BY <expression> [ ASC | DESC ] ])</code>
Pour notre scénario, l'expression sera la colonne du nom et le délimiteur sera une virgule. La clause ORDER BY garantit que les noms apparaissent dans un ordre spécifique (c'est-à-dire par ordre alphabétique).
Requête SQL
<code class="language-sql">SELECT STRING_AGG(Name, ', ') AS ConcatenatedNames FROM Names ORDER BY Name;</code>
Sortie
<code>ConcatenatedNames --------------------- Peter, Paul, Mary</code>
Solutions alternatives pour les versions antérieures de SQL Server
Si vous utilisez une version antérieure de SQL Server, telle que SQL Server 2005, vous pouvez utiliser la méthode suivante :
<code class="language-sql">SELECT ( SELECT StudentName + ',' AS [text()] FROM dbo.Students WHERE SubjectID = Main.SubjectID ORDER BY StudentID FOR XML PATH('') ).value('text()[1]', 'nvarchar(max)') AS Students FROM ( SELECT DISTINCT SubjectID FROM dbo.Students ) AS Main;</code>
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!