0

我有 2 个表employeeemployee_history一个 SQL Server 2012 数据库。该employee表包含所有员工的当前信息,并且该employee_history表跟踪每个员工的详细信息发生的所有更改。

我的要求是用employee表中每个员工的最新记录更新表中的每条记录employee_history

例如:

employee桌子:

在此处输入图像描述

employee_history桌子:

在此处输入图像描述

employee从表更新后的employee_history表应该是:

在此处输入图像描述

请注意:由于这只是一个示例,我只添加了最少的信息。但是,theemployeeemployee_history表都有很多其他列。每个表中都有一些列在另一个表中不存在。我不应该更新这些列。

你能告诉我最简单的方法是什么吗?

4

2 回答 2

2

使用 CTE 正确连接表。

;with hist as (
select *, row_number() over(partition by emp_id order by updated_date desc) rn
from employee_history
)
update employee
set Emp_First_Name = hist.Emp_First_Name --,more cols
from employee e
inner join hist on e.Emp_id = hist.emp_id and hist.rn = 1
于 2016-06-19T16:42:12.307 回答
0
update a 
   set a.Emp_first_name = b.emp_first_name,
       a.emp_last_name  = b.emp_last_name, 
       a.Emp_Phone      = b.Emp_phone, 
       a.Emp_Address    = b.Emp_address, 
       a.Emp_dept       = b.Emp_dept
from employee as a
join  ( select * 
             , row_number over (partition by emp_id order by Updated_date  desc) as rn
        from employee_history  
      ) as b 
 on b.emp_id = a.emp 
and b.rn = 1

更新

于 2016-06-19T16:33:06.540 回答