我有一个表,其中包含员工的当前状态,如下所示:
SELECT EmployeeId ,OfficeId from EmpCurrent
输出如下:
EmployeeId OfficeId
54 67
64 57
89 23
而且我还有另一个表,其中包含雇员的完整历史记录,但未历史化的OfficeId除外(我从EmpCurrent中添加了要插入的OfficeId列NULL:]
SELECT EmployeeId ,Func AS [Function],OfficeId,Version from EmpHistory
输出如下所示,用于EmployeeId = 54:
EmployeeId Function OfficeId Version
54 Manager NULL 1
54 Director NULL 2
54 HeadOf NULL 3
我想从EmpCurrent获取OfficeId并将其插入每个员工的最后一个Version(最大版本)的EmpHistory中,我的输出如下:
EmployeeId Function OfficeId Version
54 Manager NULL 1
54 Director NULL 2
54 HeadOf 67 3
首先,您需要获取3个字段h.EmployeeId, c.OfficeId, max(Version) as MaxVersion
。
其次,使用2个条件h.OfficeId = cte.OfficeId
]更新#EmpHistory
表上的h.EmployeeId = cte.EmployeeId and MaxVersion = h.Version
完整代码
;with cte as( select h.EmployeeId, c.OfficeId, max(Version) as MaxVersion from #EmpHistory h inner join #EmpCurrent c on h.EmployeeId = c.EmployeeId group by h.EmployeeId, c.OfficeId ) update h set h.OfficeId = cte.OfficeId from #EmpHistory h inner join cte on h.EmployeeId = cte.EmployeeId and MaxVersion = h.Version
输出
如果需要join
的最新值,则: