更新数据库在不同情况下不受影响

时间:2020-07-08 01:45:59

标签: sql sql-server

我有一个问题,我想为不同情况创建一个条件,例如:

当(WeekDay == 2)时,字段CanWork2应该为1,但是不会发生 只需更改1个字段“ CanWork1”

UPDATE
    Emps
SET
    CanWork1 = CASE WHEN cd.WeekDay = 1 THEN 1 ELSE CanWork1 END,
    CanWork2 = CASE WHEN cd.WeekDay = 2 THEN 1 ELSE CanWork2 END,
    CanWork3 = CASE WHEN cd.WeekDay = 3 THEN 1 ELSE CanWork3 END,
    CanWork4 = CASE WHEN cd.WeekDay = 4 THEN 1 ELSE CanWork4 END,
    CanWork5 = CASE WHEN cd.WeekDay = 5 THEN 1 ELSE CanWork5 END,
    CanWork6 = CASE WHEN cd.WeekDay = 6 THEN 1 ELSE CanWork6 END,
    CanWork7 = CASE WHEN cd.WeekDay = 7 THEN 1 ELSE CanWork7 END
FROM
    #PS_EMPLOYEES AS Emps
    CROSS JOIN _PS_checkdays1 AS cd

enter image description here

1 个答案:

答案 0 :(得分:2)

加入之前汇总:

UPDATE Emps
    SET CanWork1 = COALESCE(cd.CanWork1, Emps.CanWork1),
        CanWork2 = COALESCE(cd.CanWork2, Emps.CanWork2),
        . . .
    FROM #PS_EMPLOYEES Emps CROSS JOIN
         (SELECT MAX(CASE WHEN cd.WeekDay = 1 THEN 1 END) as CanWork1,
                 MAX(CASE WHEN cd.WeekDay = 2 THEN 1 END) as CanWork2,
                 . . . 
          FROM _PS_checkdays1 cd
         )  cd;

UPDATE语句仅更新每个匹配行一次。如果JOIN生成多行,则选择任意行进行更新。