首页 > 数据库 > mysql教程 > 如何使用查询从 SQL Server 表生成逗号分隔的列表?

如何使用查询从 SQL Server 表生成逗号分隔的列表?

DDD
发布: 2025-01-18 10:07:41
原创
650 人浏览过

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

SQL Server:使用查询生成逗号分隔列表

查询解释

此查询旨在从表中创建逗号分隔列表,它利用 FOR XML PATH 函数构造包含所需值的 XML 片段。它使用子查询来获取指定部门的员工姓名 (ename),然后用逗号替换 XML 片段中的空格。

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; 
登录后复制

FOR XML PATH 的工作原理

FOR XML PATH('') 根据指定的列(在本例中为 ename)为 emp 表中的每一行生成一个 XML 片段。假设有一个简单的员工表:

<code>EmployeeID      Name
1               John Smith
2               Jane Doe</code>
登录后复制

以下查询将创建 XML:

SELECT  EmployeeID, Name
FROM    emp.Employee
FOR XML PATH ('Employee');
登录后复制

输出:

<employee><employeeid>1</employeeid><name>John Smith</name></employee><employee><employeeid>2</employeeid><name>Jane Doe</name></employee>
登录后复制

错误处理和替代方案

提供的查询尝试使用 data() 作为 XML 标签,这是无效的,会导致错误。为了避免这种情况,可以使用以下修改后的查询:

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; 
登录后复制

此查询确保在子查询中不创建任何 XML 标记,并且它还通过在子查询中添加逗号来处理包含空格的名称。

以上是如何使用查询从 SQL Server 表生成逗号分隔的列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板