为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2019-07-08 12:49:29
此查询如何创建逗号分隔列表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
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

一步地把它拆开-由内而外。

步骤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值-加上内部查询的结果-并生成最终结果。


查看完整回答
反对 回复 2019-07-08
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

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分隔的数据更加容易。


查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 583 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信