此查询如何创建逗号分隔列表SQL Server?

此查询如何创建逗号分隔列表SQL Server?

我在Google的帮助下编写了这个查询,以便从一个表中创建一个分隔列表,但是我没有理解这个查询中的任何内容。

有人能解释一下发生了什么吗

 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;

给我结果

10  CLARK, KING, MILLER20  SMITH, JONES, SCOTT, ADAMS, FORD30  ALLEN, WARD, MARTIN, BLAKE, TURNER, JAMES


千巷猫影
浏览 587回答 3
3回答

ibeautiful

一步地把它拆开-由内而外。步骤1:运行最内部的查询,看看它会产生什么:SELECT E2.ename AS 'data()' FROM emp AS e2  WHERE e2.DEPTNO = 10FOR XML PATH('')您应该得到一个输出,类似于:CLARK KING MILLER步骤2:这个REPLACE只是用,-从而将你的产出转化为CLARK, KING, MILLER步骤3:外部查询获取deptno值-加上内部查询的结果-并生成最终结果。

繁星淼淼

SQLServer 2017使用新的STRING_AGG..最近我发现了这篇文章并把我的资料/用于XML使用新字符串函数的策略。还避免了额外的JOIN/SUBQUERY和for XML的开销(以及奇数编码问题),很难解释SQL。SELECT  E1.deptno,          STRING_AGG(E1.ename, ', ') AS allempFROM    EMP AS e1  GROUP BY DEPTNO;注*也要确保看看对方STRING_SPLIT使使用SQL分隔的数据更加容易。
打开App,查看更多内容
随时随地看视频慕课网APP