sql - 如何在 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
解决方案
据我所知,不需要聚合:
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;
推荐阅读
- spring-integration - 通过 JmsTransactionManager 通过 errorChannel 抛出的 Spring Integration 重新交付不遵守 maximumRedeliveries
- angular - Angular 2+:获取@ViewChild() 的子元素
- javascript - onkeyup 激活许多 ajax 请求
- python - Python:获取亚马逊 s3 存储桶中的前 100 个最新密钥
- vba - 允许用户选择 csv 的 VBA 不起作用
- circuit - 如何为机器人实现 OAuth 2 Circuit REST API?
- ios - 将 .html 从 iOS 应用资源加载到 WebView 中?
- llvm - 在 llvm 的 PassManager 中添加 TargetData 时出错
- reactjs - 将数组放入新组件时,对象不是函数错误
- docker - Sonarr/Radarr Remote path mapping to docker transmission