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

SQL Server 2016:将多行角色名合并为单行逗号分隔列

合并同一员工的多角色为逗号分隔列

将同一员工对应的多个角色名合并为单条记录,角色名以逗号分隔,不同数据库的实现方式如下:

MySQL/MariaDB

使用GROUP_CONCAT()聚合函数,配合GROUP BY按员工UUID分组:

SELECT    
    EMP.Employee_UUID AS ID,
    GROUP_CONCAT(ER.Role_Name SEPARATOR ', ') AS Roles
FROM
    Employees_To_Roles AS E2R 
INNER JOIN
    Employee_Roles AS ER ON E2R.Role_ID = ER.Role_ID 
                         AND E2R.App_id = ER.App_id 
INNER JOIN
    Employees EMP ON E2R.Employee_UUID = EMP.Employee_UUID
WHERE     
    E2R.App_id = 2
GROUP BY EMP.Employee_UUID;

SQL Server 2017+/Azure SQL

使用STRING_AGG()函数:

SELECT    
    EMP.Employee_UUID AS ID,
    STRING_AGG(ER.Role_Name, ', ') AS Roles
FROM
    Employees_To_Roles AS E2R 
INNER JOIN
    Employee_Roles AS ER ON E2R.Role_ID = ER.Role_ID 
                         AND E2R.App_id = ER.App_id 
INNER JOIN
    Employees EMP ON E2R.Employee_UUID = EMP.Employee_UUID
WHERE     
    E2R.App_id = 2
GROUP BY EMP.Employee_UUID;

Oracle 11gR2+

使用LISTAGG()函数,可指定拼接顺序:

SELECT    
    EMP.Employee_UUID AS ID,
    LISTAGG(ER.Role_Name, ', ') WITHIN GROUP (ORDER BY ER.Role_Name) AS Roles
FROM
    Employees_To_Roles AS E2R 
INNER JOIN
    Employee_Roles AS ER ON E2R.Role_ID = ER.Role_ID 
                         AND E2R.App_id = ER.App_id 
INNER JOIN
    Employees EMP ON E2R.Employee_UUID = EMP.Employee_UUID
WHERE     
    E2R.App_id = 2
GROUP BY EMP.Employee_UUID;

PostgreSQL 9.0+

使用STRING_AGG()函数,支持排序:

SELECT    
    EMP.Employee_UUID AS ID,
    STRING_AGG(ER.Role_Name, ', ') ORDER BY ER.Role_Name AS Roles
FROM
    Employees_To_Roles AS E2R 
INNER JOIN
    Employee_Roles AS ER ON E2R.Role_ID = ER.Role_ID 
                         AND E2R.App_id = ER.App_id 
INNER JOIN
    Employees EMP ON E2R.Employee_UUID = EMP.Employee_UUID
WHERE     
    E2R.App_id = 2
GROUP BY EMP.Employee_UUID;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:05:09