首页 > 解决方案 > 使用 WHERE NOT EXISTS 和 LAG 使用新行更新表

问题描述

我正在使用 SQL Server 2016 我有一个 HR csv,我每天都将它导入到导入表中我只想将某些列的更改添加到我的 HR 表中。
我使用了以下 INSERT INTO 查询,但是当一个人担任一个职位,然后稍后恢复到原始类别和等级时,具有原始值的行不会出现。想知道我是否可以在 WHERE NOT EXISTS 部分使用 LAG

INSERT INTO HRTable (HR_ImportDate,HR_EmpID,HR_Employee,HR_Category,HR_Grade)
SELECT IMP_ImportDate,IMP_EmpID,IMP_Employee,IMP_Category,IMP_Grade
FROM ImportTable
WHERE NOT EXISTS (SELECT * FROM HRTable  
WHERE (HR_EmpID=IMP_EmpID) and (HR_Category=IMP_Category) and (HR_Grade=IMP_Grade))

条目示例;最后一个没有被返回,因为它与第一行具有相同的值。

这是来自 csv 集成的数据:

Date  ID  Emp  Cat  Grade
20/3  401  John PT  P10
21/3  401  John FT  F10
22/4  401  John FT  F10
23/4  401  John PT  P10
24/4  401  John PT  P10
25/4  401  John PT  P10
26/4  401  John PT  P10
27/4  401  John PT  P10

这些是需要添加到 HRTable 的行

Date  ID  Emp  Cat  Grade
20/3  401  John PT  P10
21/3  401  John FT  F10
23/4  401  John PT  P10

标签: sql-server

解决方案


推荐阅读