首页 > 解决方案 > 如何在 SQL 中具有多个值的列上使用条件聚合

问题描述

在此处输入图像描述

我需要生成一个输出以将不同的角色(来自 table2)显示为 id(来自表 1)的单独列,但角色不是必须出现在表 2 中,有时也可以有多个角色。我被困在这里。

我已经尝试过合并,但是我无法将多个值放入不同的列

SELECT 
i.id,
i.name,
COALESCE(MAX(CASE WHEN r.ID = i.id THEN r.Role END), 'NA') AS Role,
COALESCE(MAX(CASE WHEN r.Role = rl.Role THEN rl.value END), 'NA') AS value,
COALESCE(MAX(CASE WHEN r.Role = rl.Role   THEN rl.value_2 END), 'NA') AS value_2

FROM employee_id AS i LEFT JOIN employee_role r ON r.id = i.id LEFT JOIN Role rl ON r.role = rl.role GROUP BY i.id, i.name

请在下面找到表结构:

表 1:Employee_id
ID 名称
100021 Bob
100023 Tom
100024 Jim

表 2:Employee_Role
ID 角色
100023 user1
100024 Beta_user
100024 user

表 3:Role
角色值 value_2
Beta_user zz 56
user 23 ss
user1 sd 45

Required_Result
ID 名称 角色值 value_2 100021 Bob NA NA NA 100023 Tom user1 sd 45 100024 Jim Beta_user zz 56 100024 Jim user 23 ss

标签: sql

解决方案


据我所知,不需要聚合:

SELECT e.id, e.name, er.role,
       COALESCE(rl.value, 'NA') AS value,
       COALESCE(rl.value_2, 'NA') AS value_2
FROM employee_id e LEFT JOIN
     employee_role er
     ON er.id = e.id LEFT JOIN
     Role r
     ON er.role = r.role;

推荐阅读