You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSSQL如何将同一员工的多个角色拼接为逗号分隔的字符串输出

方案1:SQL Server 2017 及以上版本(推荐)

直接使用内置的STRING_AGG聚合函数实现字符串拼接,修改后的查询语句如下:

SELECT
    E.ID,
    E.Name AS 姓名,
    STRING_AGG(R.Role, ', ') AS 所有角色
FROM
    EMPLOYEE_ROLE ER
    JOIN ROLE R ON R.ID = ER.RoleID
    JOIN EMPLOYEE E ON ER.EmployeeID = E.ID
GROUP BY
    E.ID, E.Name
  • STRING_AGG第一个参数是要拼接的字段,第二个参数是拼接的分隔符,配合GROUP BY按人员ID和姓名分组,即可将同一人员的所有角色拼接为单个字符串,和你要求的输出格式完全匹配。
方案2:SQL Server 2016 及更早版本

旧版本没有STRING_AGG函数,可通过FOR XML PATH语法实现同样效果:

SELECT
    E.ID,
    E.Name AS 姓名,
    STUFF((
        SELECT ', ' + R2.Role
        FROM EMPLOYEE_ROLE ER2
        JOIN ROLE R2 ON R2.ID = ER2.RoleID
        WHERE ER2.EmployeeID = E.ID
        FOR XML PATH(''), TYPE
    ).value('.', 'NVARCHAR(MAX)'), 1, 2, '') AS 所有角色
FROM EMPLOYEE E
GROUP BY E.ID, E.Name
  • STUFF函数的作用是删除拼接结果开头多余的, (两个字符),最终输出的格式和方案1完全一致。

两种方案运行后都会得到你预期的结果:

ID姓名所有角色
00001BobRole abc, Role def, Role ghi
00002TomRole jkl

内容的提问来源于stack exchange,提问作者JS16

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:54:05