根据条件更新表中的所有行

0 sql t-sql sql-server if-statement while-loop

我有一个名为Training的表,其中包含Employee ID,Hours,is3ManDay等行.在此表中,可能有多个记录对应于同一个Employee.

我必须计算与每个员工ID相关的小时数,我这样做了

SELECT EMP_ID, SUM(HRS) AS TOTALHRS, is3ManDay
from Training
GROUP BY EMP_ID, is3ManDay
Run Code Online (Sandbox Code Playgroud)

工作完全正常,但现在我想根据每个员工的总小时数将is3ManDay更新为是或否

@Emp_ID int,
@is3ManDay varchar(10)
IF (SELECT SUM(Hrs) FROM Training WHERE Emp_ID = @Emp_ID) >= 36
BEGIN
   UPDATE Training
   SET is3ManDay = 'Y'
   Where Emp_ID = @Emp_ID
END
ELSE
   UPDATE Training
   SET is3ManDay = 'N'
   Where Emp_ID = @Emp_ID
Run Code Online (Sandbox Code Playgroud)

这个也很好但是我必须手动更改@Emp_ID并执行不实用的存储过程.我想在这段代码中包含一个循环,但如果我删除@Emp_ID,它将更新所有具有相同值的行,因为没有选择ID.

WHILE (SELECT SUM(HRS) FROM Training) >= 36
BEGIN
   UPDATE Training
   SET is3ManDay = 'Y'
END
Run Code Online (Sandbox Code Playgroud)

我尝试了WHILE声明,但没有为我工作.

Jos*_*osh 5

你不需要是程序性的.使用SQL:

UPDATE Training
SET is3ManDay = 'Y'
Where Emp_ID in 
(SELECT Emp_ID FROM Training HAVING SUM(Hrs) >= 36)
Run Code Online (Sandbox Code Playgroud)