0

SQL Server 2012 データベースに2 つのテーブルがemployeeあります。employee_historyこのemployeeテーブルには、すべての従業員の現在の情報が含まれておりemployee_history、各従業員の詳細に発生したすべての変更が追跡されます。

私の要件は、employeeテーブルの各従業員の最新のレコードでテーブルの各レコードを更新することemployee_historyです。

例えば:

employeeテーブル:

ここに画像の説明を入力

employee_historyテーブル:

ここに画像の説明を入力

employeeテーブルからの更新後のemployee_historyテーブルは次のようになります。

ここに画像の説明を入力

注:これは一例に過ぎないため、最小限の情報のみを追加しています。ただし、テーブルemployeeemployee_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 に答える