更新第一个表的列为空,并且值来自第二个表。两个表都具有相同的主键

时间:2018-09-27 02:33:07

标签: sql-server-2008

我的出勤表结构如下,每个值 专栏是来自上半天的出勤率。 TimeIn1是工作前的早晨,TimeOut1是员工午休的时间。 TimeIn2下午恢复工作,TimeOut2回家。

一天的前半部分进入出勤表。

AttnDate    EmpIdNo     TimeIn1     TimeOut1    TimeIn2     TimeOut2
2018-09-25  0005905     07:10:00    12:07:00    NULL        NULL
2018-09-25  0010134     07:33:00    12:03:00    NULL        NULL

第二天的下半部分,取自新的日志。

AttnDate    EmpIdNo     TimeIn1     TimeOut1    TimeIn2     TimeOut2
2018-09-25  0005905     NULL        NULL        12:45:00    21:06:00
2018-09-25  0010134     NULL        NULL        12:50:00    20:35:00

然后,我只想在列为空的情况下更新出勤表,以下是最终更新的出勤表。

AttnDate    EmpIdNo     TimeIn1     TimeOut1    TimeIn2     TimeOut2
2018-09-25  0005905     07:10:00    12:07:00    12:45:00    21:06:00
2018-09-25  0010134     07:33:00    12:03:00    12:50:00    20:35:00

1 个答案:

答案 0 :(得分:1)

我们可以尝试在此处进行更新加入:

UPPDATE a
SET
    TimeIn1 = COALESCE(TimeIn1, b.TimeIn1),
    TimeOut1 = COALESCE(TimeOut1, b.TimeOut1),
    TimeIn2 = COALESCE(TimeIn2, b.TimeIn2),
    TimeOut2 = COALESCE(TimeOut2, b.TimeOut2)
FROM Attendance a
INNER JOIN Logs b
    ON a.AttnDate = b.AttnDate AND a.EmpIdNo = b.EmpIdNo
WHERE
    TimeIn1 IS NULL OR TimeOut1 IS NULL OR TimeIn2 IS NULL OR TimeOut2 IS NULL;