访问:如何从计算字段创建更新查询

时间:2014-10-08 19:28:35

标签: ms-access sql-update calculated-field

我对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”

1 个答案:

答案 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];