Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当另一个字段导致TSQL中的更改时,如何将该字段恢复为以前的值_Sql_Sql Server_Sql Update - Fatal编程技术网

当另一个字段导致TSQL中的更改时,如何将该字段恢复为以前的值

当另一个字段导致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。提前谢谢 使用

我有一个表,它有一个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值更新终止后的行

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

可能一个触发器就可以了