sql - SQL Server - 连接表,使多行变成一行
问题描述
我正在尝试创建一个 Join 语句,它将组合两个表,一个用于员工信息,另一个用于工作角色信息。表的结构如下:
表格1
表 2
我想以这样的方式加入这两个表,即 JobKey 和 JobValue 与关联的员工是同一行,而不是创建重复的行。通常,连接语句会创建:
相反,我想要的是这样的:
有没有有效的方法来做到这一点?
编辑:这是我目前用来加入他们的查询:
select * from testTable1 as a left join testTable2 as b on a.EmployeeName = b.EmployeeName
解决方案
您可以使用条件聚合:
select t1.*, t2.jobkey_1, t2.jobvalue_1, t2.jobkey_2, t2.jobkey_2
from table1 t1 left join
(select t2.employeename,
max(case when seqnum = 1 then jobkey end) as jobkey_1,
max(case when seqnum = 1 then jobvalue end) as jobvalue_1,
max(case when seqnum = 2 then jobkey end) as jobkey_2,
max(case when seqnum = 2 then jobvalue end) as jobvalue_2,
from (select t2.*, row_number() over (partition by employeename order by rowid) as seqnum
from table2 t2
) t2
group by employeename
) t2;
注意:您似乎使用员工姓名作为表之间的连接键。你真的应该使用员工ID。
推荐阅读
- api - 如何在golang中通过重定向发送cookie?
- python - 如何创建 Matplotlib 轴的新实例?
- c# - Custom web app login page using ADAL.net to validate Azure AD credentials
- r - 将所有分类变量的缺失替换为“无”
- matlab - 使用drawfreehand绘制感兴趣区域后如何裁剪图像?
- javascript - 为什么 React 随机(看起来)重新加载缓存的图像?
- ambari - 通过 Ambari 安装 Ranger 数据库时,“不允许主机 'xxxx 连接到此 MySQL 服务器”
- java - 如何在arraylist中添加数据和更新
- java - 如何使用 Apache Commons Math 从曲线中获取残差
- django - 如何在 Django 模板中阅读字典