我遇到了棘手的问题(在MS Access 2013中)。我想做一个相当简单的事情:
我有两张桌子(见下面的例子):表“得分”,分数为考试,表格为“grading_key”。
得分表有一个名为“quotient”的字段,其中包含一个表示成功百分比的浮点值(1.0表示所有问题都正确回答)。 grading_key表具有商数限制,将一个等级与下一个等级分开。因此,“grading_key”表可用于获得任何商数的等级。
通过执行以下内容可以找到成绩:
SELECT TOP 1 Grade FROM grading_key WHERE {ANY_QUOTIENT_VALUE} <= Quotient
样本表:
|-grade_key-| |-----scores-----|
Quotient Grade StudentId Quotient
0,92 1 123 0,85
0,87 1,5 321 0,8
0,81 2 766 0,91
0,76 2,5 222 0,78
我的问题是,我想在查询中加入分数和分数,从而将表“分数”中的每个商与表“grade_key”中的一个分数相关联(参见下面的desired_result)。不幸的是,我不能简单地加入,因为“得分”中的商不一定与“grade_key”中定义的等级限制相匹配。 目前我使用了VBA函数(calculateScoreForQuotient()),但我想删除VBA依赖项,因为应该从MS Access外部调用结果表,在这种情况下,VBA函数不起作用。
|--------Desired_Result-------|
StudentId Quotient Grade
123 0,85 2
312 0,8 2,5
有没有人知道用纯SQL获取所需表的方法?我现在已经玩了不同的JOIN和WHERE组合很长一段时间,但我最好的结果是将所有可用的成绩与每个学生联系起来(不是很有意义)。
任何帮助都可以保障我的一天; - )
答案 0 :(得分:0)
您可以使用共同相关的子查询根据学生的商来返回成绩。您可以将Max()或TOP 1与order by子句一起使用,无论您喜欢哪种。
select
StudentID,
Quotient,
(select Max(grade) from Grades where grades.quotient <= student.quotient) as grade
from Student