我对Access很新,所以如果这是一个愚蠢的问题,我很抱歉。我已经广泛搜索了答案,但我可能没有使用正确的术语。
我有两个表tblStudents1213和tblAttendance12-13。我创建了一个查询,计算学生无故缺席的总数。我想先获取该计算值,然后创建一个更新查询,该查询将根据主键(即名为student_key的字段)更新tblStudents1213.total_unexcused。
目前,我运行第一个计算缺席的查询,我包含student_key字段,将表导出到excel文件,将该excel文件导入为新表,然后使用SQL编写更新查询以更新tblStudents1213。我担心SQL不是很好。
感谢您提供任何帮助!
修改
这是我用来计算无故缺席次数的查询代码:
SELECT tblStudents1213.student_key, [tblAttendance12-13].excused_absence, Count([tblAttendance12- 13].ID) AS Total_Unexcused
FROM tblStudents1213 INNER JOIN [tblAttendance12-13] ON tblStudents1213.student_key = [tblAttendance12-13].student_key
GROUP BY tblStudents1213.student_key, [tblAttendance12-13].excused_absence
HAVING ((([tblAttendance12-13].excused_absence)=3));
示例数据:
tblAttendance12-13
ID student_key excused_absence
1 195797 3
2 195797 1
3 195797 2
4 195797 3
5 195797 3
tblStudents1213
student_key grade gender total_unexcused
195797 8 1
139722 9 2
492757 9 2
tblStudents1213中的Primay键是“student_key”,它也是tblAttendance12-13中的外键(一对多)。 tblAttendance12-13中的主键是“ID”
答案 0 :(得分:2)
因此,对于我们的第一个查询,我们需要COUNT()
所有记录excused_absence = 3
,我们可以GROUP BY
Student_key
来实现这些结果。
SELECT tblAttendence.Student_key,
Count(*) AS CountOfexcused_absence
INTO ExcusedTempTbl
FROM tblAttendence
WHERE (((tblAttendence.[excused_absence])=3))
GROUP BY tblAttendence.Student_key;
因为我们不能将聚合查询用作临时记录集,所以我们可以创建一个临时表来用来做这件事。每次运行查询时,表都将被删除并重新创建。
现在我们需要使用数据更新tblStudents
。
UPDATE ExcusedTempTbl
INNER JOIN tblStudents ON ExcusedTempTbl.Student_key = tblStudents.Student_key
SET tblStudents.total_unexcused = [ExcusedTempTbl].[CountOfexcused_absence];