Sql server 表更新,按人员聚合
我有一个学生表,我想用每个学生的出勤信息更新一个字段 我天真的尝试失败了Sql server 表更新,按人员聚合,sql-server,tsql,Sql Server,Tsql,我有一个学生表,我想用每个学生的出勤信息更新一个字段 我天真的尝试失败了 UPDATE Student SET CurrentAttendance = COUNT(AttendanceID) FROM Student INNER JOIN Attendance ON Student.StudentID = Attendance.iStudentID 当然,您不能使用聚合进行更新 我找到了这个解决方案: UPDATE Student SET CurrentAttendance = q.COUNT
UPDATE Student
SET CurrentAttendance = COUNT(AttendanceID)
FROM Student INNER JOIN Attendance ON Student.StudentID = Attendance.iStudentID
当然,您不能使用聚合进行更新
我找到了这个解决方案:
UPDATE Student
SET CurrentAttendance = q.COUNTID
FROM (SELECT COUNT(AttenanceID) AS COUNTID
FROM Student INNER JOIN Attendance
ON Student.StudentID = Attendance.StudentID) q
虽然这样运行没有错误,但显然是错误的。每个学生都有相同的出勤人数,这似乎是所有学生的出勤人数
如何运行此更新,使其仅更新每个学生的出勤人数?获取派生表中按StudentID
分组的count()
,然后返回到student
:
UPDATE S
SET CurrentAttendance = AttendanceCount
FROM Student S
INNER JOIN (SELECT COUNT(AttendanceID) as AttendanceCount, StudentID
FROM Attendance
GROUP BY StudentID) A on A.StudentID = S.StudentID
您需要一个
分组依据
和一个位置
UPDATE Student
SET CurrentAttendance = q.COUNTID
FROM (SELECT COUNT(AttenanceID) AS COUNTID, StudentID
FROM Attendance
Group by StudentID) q
WHERE StudentID = q.StudentID
你很接近。如果要更新所有学生,可以使用相关子查询:
UPDATE Student
SET CurrentAttendance = (SELECT COUNT(*)
FROM Attendance
WHERE Student.StudentID = Attendance.iStudentID
);
这将更新所有学生,甚至那些在
出勤记录中没有记录的学生
这正是我所要找的!谢谢