Requête pour créer une liste séparée par des virgules dans SQL Server
La requête que vous avez fournie est conçue pour créer une liste de noms d'employés séparés par des virgules à partir d'une table. Cependant, la complexité de la requête peut vous dérouter. Décomposons-le étape par étape.
Étape 1 : Combinez les sous-requêtes de noms d'employés
Sous-requête :
<code class="language-sql">SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')</code>
Renvoyer le nom de l'employé connecté au format XML. L'alias "data()" est utilisé pour forcer une erreur, qui est ensuite masquée par la clause FOR XML PATH(''). Cela se traduira par du XML sans aucune balise.
Étape 2 : Supprimer les espaces
La fonctionReplace() permet de remplacer les espaces dans les chaînes XML par des virgules :
<code class="language-sql">allemp = Replace ((SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')), ' ', ', ') </code>
Étape 3 : Regroupement et sortie
Utilisez GROUP BY DEPTNO pour regrouper les requêtes par numéro de service. Ensuite, affichez le résultat sous la forme d’une liste de noms d’employés séparés par des virgules pour chaque service.
Requête alternative
La requête suivante peut également être utilisée pour obtenir les mêmes résultats, avec quelques améliorations :
<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>
Cette requête utilise la fonction STUFF() pour supprimer la première virgule et l'espace. Il omet également l'alias dans la sous-requête pour éviter de créer des balises XML.
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!