当另一个字段导致TSQL中的更改时,如何将该字段恢复为以前的值
我有一个表,它有一个JobStartDt列和一个TermDt列。填充终止日期时,JobStartDt将被终止日期覆盖(就像我从HR收到的源数据中那样)。我需要我的SQL脚本从以前的ReportDate中查找JobStartDt,并更新填充TermDt时更改的值(每个人每天都有一条记录)。所以在下面的例子中,这个人的TermDt是7/17-我需要JobStartDt恢复到9/16/15。这在SQL中可能吗?我正在使用SQL Server Management Studio 2014。提前谢谢 使用CTE和ROW_NUMBER()函数,对于每个雇用,查找终止前的最后一条记录,并使用正确的JobStartDt值更新终止后的行当另一个字段导致TSQL中的更改时,如何将该字段恢复为以前的值,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我有一个表,它有一个JobStartDt列和一个TermDt列。填充终止日期时,JobStartDt将被终止日期覆盖(就像我从HR收到的源数据中那样)。我需要我的SQL脚本从以前的ReportDate中查找JobStartDt,并更新填充TermDt时更改的值(每个人每天都有一条记录)。所以在下面的例子中,这个人的TermDt是7/17-我需要JobStartDt恢复到9/16/15。这在SQL中可能吗?我正在使用SQL Server Management Studio 2014。提前谢谢 使用
WITH CTE_BeforeTerm AS
(
SELECT * FROM YourTable
WHERE TermDT IS NULL
)
, CTE_RN
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY EmpID ORDER BY ReportDate DESC) RN
FROM CTE_BeforeTerm
)
UPDATE t
SET t.JobStartDt = r.JobStartDt
FROM YourTable t
INNER JOIN CTE_RN r ON r.EmpID = t.EmpID AND r.RN = 1
WHERE t.TermDt IS NOT NULL
可能一个触发器就可以了