首页 > 解决方案 > SQL Server - 连接表,使多行变成一行

问题描述

我正在尝试创建一个 Join 语句,它将组合两个表,一个用于员工信息,另一个用于工作角色信息。表的结构如下:

表格1

在此处输入图像描述

表 2

在此处输入图像描述

我想以这样的方式加入这两个表,即 JobKey 和 JobValue 与关联的员工是同一行,而不是创建重复的行。通常,连接语句会创建:

在此处输入图像描述

相反,我想要的是这样的:

在此处输入图像描述

有没有有效的方法来做到这一点?

编辑:这是我目前用来加入他们的查询:

select * from testTable1 as a left join testTable2 as b on a.EmployeeName = b.EmployeeName

标签: sqlsql-server

解决方案


您可以使用条件聚合:

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。


推荐阅读