我是一名高中数学老师,也是我学校的“数据专家”。我在Microsft Exel和Access中自学成才,我最近学习了一些常用Access工作背后的SQL查询语言。我很乐意使用Access查询将来自多个来源的数据联系在一起,例如来自一个来源的考试成绩,来自第二来源的英语熟练程度以及来自第三来源的家庭电话号码。
以下是我不知道如何在Microsoft Access中执行此操作的情况。
我的数学学生每年最多接受3次纽约州考试。他们需要80分才能被认为是“大学准备好了”。
以下是3个示例表。每个表使用唯一的主键“StudentID”。综合代数考试的代码为MXRE。
Table #1 name: JanuaryAlgebra
StudentID Course Mark
201 MXRE 90
202 MXRE 55
203 MXRE 67
204 MXRE 80
205 MXRE 78
注意:#201和#204学生已完成考试,不再考试。
Table #2 name: JuneAlgebra
StudentID Course Mark
202 MXRE 70
203 MXRE 76
205 MXRE 81
206 MXRE 86
207 MXRE 78
学校有两名新生,#206和#207。学生#205和#206已经完成了高分考试,其余三名学生第三次参加考试。
表#3名称:AugustAlgebra
StudentID Course Mark
202 MXRE 72
203 MXRE 83
207 MXRE 93
如何在学年结束后为每个显示最高考试成绩的学生ID返回一行查询?
谢谢!
答案 0 :(得分:1)
我不熟悉Access,但我认为它支持T-SQL。如果是,那么您可以在一个语句中选择所有行并获得最大值。虽然我在写这个答案时意识到用子选择
可能更容易在SQL中它看起来像:
SELECT StudentId, Course, Max(Mark) FROM ( SELECT StudentId, Course, Mark FROM JanuaryAlgebra UNION SELECT StudentId, Course, Mark FROM JuneAlgebra UNION SELECT StudentId, Course, Mark FROM AugustAlgebra ) as NewTable GROUP BY StudentId, Course
答案 1 :(得分:1)
我建议改变表结构:
YourTable (Student_ID,Course,Mark,Date)
然后你可以简单地查询:
SELECT Student_ID,Course,MAX(Mark) AS Max_Mark
FROM YourTable
--WHERE Course = 'MXRE' --If you wanted only algebra results.
GROUP BY Student_ID,Course
相同结构的多个表几乎没有意义。
但是,您可以使用当前格式通过将子查询中的所有表联合在一起来执行此操作。