多个表的最大值

时间:2014-01-28 17:46:55

标签: sql ms-access

我是一名高中数学老师,也是我学校的“数据专家”。我在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返回一行查询?

谢谢!

  • 杰夫

2 个答案:

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

相同结构的多个表几乎没有意义。

但是,您可以使用当前格式通过将子查询中的所有表联合在一起来执行此操作。