我有一个问题,我想为不同情况创建一个条件,例如:
当(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
答案 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
生成多行,则选择任意行进行更新。