Maison >base de données >tutoriel mysql >Comment concaténer le texte de plusieurs lignes en une seule chaîne dans SQL Server?

Comment concaténer le texte de plusieurs lignes en une seule chaîne dans SQL Server?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-25 18:12:09456parcourir

How to Concatenate Text from Multiple Rows into a Single String in SQL Server?

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 :

  • Pierre
  • Paul
  • Marie

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!

Déclaration:
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