Maison > base de données > tutoriel mysql > Comment générer des listes séparées par des virgules à partir de tables SQL Server à l'aide de requêtes ?

Comment générer des listes séparées par des virgules à partir de tables SQL Server à l'aide de requêtes ?

DDD
Libérer: 2025-01-18 10:07:41
original
625 Les gens l'ont consulté

How to Generate Comma-Separated Lists from SQL Server Tables Using Queries?

SQL Server : utiliser une requête pour générer une liste séparée par des virgules

Explication de la requête

Cette requête est conçue pour créer une liste séparée par des virgules à partir d'une table, elle utilise la fonction FOR XML PATH pour construire un fragment XML contenant les valeurs requises. Il utilise une sous-requête pour obtenir le nom de l'employé (ename) pour un service spécifié, puis remplace les espaces du fragment XML par des virgules.

<code class="language-sql">SELECT 
    E1.deptno, 
    allemp = Replace ((SELECT E2.ename AS 'data()' 
                       FROM emp AS e2 
                       WHERE e1.deptno = e2.DEPTNO 
                       FOR xml PATH('')), ' ', ', ') 
 FROM EMP AS e1 
 GROUP BY DEPTNO; </code>
Copier après la connexion

Comment fonctionne FOR XML PATH

FOR XML PATH('') génère un fragment XML pour chaque ligne de la table emp en fonction de la colonne spécifiée (dans ce cas, ename). Supposons qu'il existe une simple table d'employés :

<code>EmployeeID      Name
1               John Smith
2               Jane Doe</code>
Copier après la connexion

La requête suivante créera du XML :

<code class="language-sql">SELECT  EmployeeID, Name
FROM    emp.Employee
FOR XML PATH ('Employee');</code>
Copier après la connexion

Sortie :

<code class="language-xml"><employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee></code>
Copier après la connexion

Gestion des erreurs et alternatives

La requête fournie tente d'utiliser data() comme balise XML, ce qui n'est pas valide et entraînera une erreur. Pour éviter cela, vous pouvez utiliser la requête modifiée suivante :

<code class="language-sql">SELECT  E1.deptno, 
        STUFF(( SELECT  ', ' + E2.ename 
                FROM    emp AS e2 
                WHERE   e1.deptno = e2.DEPTNO 
                FOR XML PATH('')
            ), 1, 2, '') 
FROM    EMP AS e1 
GROUP BY DEPTNO; </code>
Copier après la connexion

Cette requête garantit qu'aucune balise XML n'est créée dans la sous-requête et gère également les noms contenant des espaces en ajoutant des virgules dans la sous-requête.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal