2017-05-16 4 views
1

私は学生のテーブルを持っており、各学生の出席情報でフィールドを更新したいと考えています。個人による集計によるテーブルの更新

私の素朴な試みは

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 

これはエラーなしで実行されますが、それは明らかに間違っているのです。すべての生徒の出席回数は同じですが、すべて人です。

学生の出席者数が各学生に更新されるように、このアップデートを実行するにはどうすればよいですか?

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 

答えて

1

が必要になります。

+0

まさに私が探していたもの!ありがとう。 –

1

はバックStudentに参加し、その後、COUNT()が派生テーブル内StudentIDでグループ化された取得します。これも、それらのAttendanceでレコードのないすべて学生を、更新します

UPDATE Student 
SET CurrentAttendance = (SELECT COUNT(*) 
         FROM Attendance 
         WHERE Student.StudentID = Attendance.iStudentID 
         ); 

:あなたはすべて学生を更新する場合は、相関サブクエリを使用することができます。

1

を、あなたが近くにありGroup ByWhere

UPDATE Student 
SET CurrentAttendance = q.COUNTID 
FROM (SELECT COUNT(AttenanceID) AS COUNTID, StudentID 
     FROM Attendance 
     Group by StudentID) q 
WHERE StudentID = q.StudentID 
関連する問題