2016-06-19 17 views
0

Ich habe 2 Tabellen employee und employee_history in einer SQL Server 2012-Datenbank. Die employee Tabelle enthält die aktuellen Informationen aller Mitarbeiter und die employee_history Tabelle speichert alle Änderungen, die den Details der einzelnen Mitarbeiter passiert sind.SQL Server: Tabelle mithilfe von Datensätzen aus einer anderen Tabelle aktualisieren

Meine Anforderung besteht darin, jeden Datensatz in der Tabelle mit dem neuesten Datensatz für jeden Mitarbeiter aus der Tabelle employee_history zu aktualisieren.

Zum Beispiel:

employee Tabelle:

enter image description here

employee_history Tabelle:

enter image description here

employee Tabelle nach dem Update von employee_history Tisch sein sollte:

enter image description here

Bitte beachten Sie:, da dies ist nur ein Beispiel, ich habe nur minimale Informationen hinzugefügt. Aber, sowohl die employee und employee_history Tabellen haben viele andere Spalten. Und es gibt einige Spalten in jeder Tabelle, die in der anderen Tabelle nicht vorhanden sind. Ich sollte diese Spalten nicht aktualisieren.

Können Sie mir bitte sagen, was ist der einfachste Weg, dies zu tun?

+1

Bitte kennzeichnen Sie Ihre Frage mit der Datenbank, die Sie verwenden. –

Antwort

2

Verwenden CTE richtig Tabellen zu verbinden.

;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 
+1

Nr. Linke Seite im Update gehört immer zu der Tabelle, die aktualisiert werden soll. –

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 

update