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
Libérer: 2025-01-25 18:12:09
original
451 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

Sortie

<code>ConcatenatedNames
---------------------
Peter, Paul, Mary</code>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal