浮动值非常特殊

时间:2015-03-17 20:45:25

标签: sql ms-access join

我遇到了棘手的问题(在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组合很长一段时间,但我最好的结果是将所有可用的成绩与每个学生联系起来(不是很有意义)。

任何帮助都可以保障我的一天; - )

1 个答案:

答案 0 :(得分:0)

您可以使用共同相关的子查询根据学生的商来返回成绩。您可以将Max()或TOP 1与order by子句一起使用,无论您喜欢哪种。

select 
    StudentID,
    Quotient,
    (select Max(grade) from Grades where grades.quotient <= student.quotient) as grade
from Student