SQL Server中创建逗号分隔列表的查询
您提供的查询旨在从表中创建员工姓名的逗号分隔列表。但是,查询的复杂性可能会让您感到困惑。让我们逐步分解它。
步骤1:组合员工姓名的子查询
子查询:
<code class="language-sql">SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')</code>
将连接的员工姓名作为XML返回。“data()”别名用于强制出错,然后由FOR XML PATH('')子句隐藏。这将导致没有任何标签的XML。
步骤2:去除空格
Replace()函数用于将XML字符串中的空格替换为逗号:
<code class="language-sql">allemp = Replace ((SELECT E2.ename AS 'data()' FROM emp AS e2 WHERE e1.deptno = e2.DEPTNO FOR xml PATH('')), ' ', ', ') </code>
步骤3:分组和输出
使用GROUP BY DEPTNO按部门编号对查询进行分组。然后,将输出显示为每个部门的员工姓名逗号分隔列表。
替代查询
以下查询也可以用于实现相同的结果,并进行了一些改进:
<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>
此查询使用STUFF()函数删除第一个逗号和空格。它还在子查询中省略了别名,以避免创建XML标签。
以上是如何在 SQL Server 中创建以逗号分隔的员工姓名列表?的详细内容。更多信息请关注PHP中文网其他相关文章!