我刚刚创建了一个 Access 2010 数据库,用于分析学生的考试成绩。我能够正确获得所有学生的成绩。共有六门科目。我现在要做的是找出谁在六门科目中的五门科目中获得了 A 级。也就是说,谁只差一门科目就错过了满分 A 级。
现在,我以表格形式保存了学生的成绩。学生姓名,后面六列是他们所有六门科目的成绩。像这样:
ENG LANGUAGE PHY CHE BIO MATH
ANN A+ A+ C A+ A+ A+
JOHN B+ C A A+ B C+
为了找到所有科目都获得 A+ 的人,我在查询中添加了 A+ 作为条件。但是我们如何找到在任意五门科目中都获得 A+ 的人呢?
我们可以在查询中添加表达式吗,或者我们可以使用 vba 代码吗?你能帮我吗?我就是找不到办法。任何帮助我都会非常感激。
答案1
您的数据库架构设计得很糟糕。使用正确规范化的架构,您只需进行一次简单查询即可获得结果。这实际上可能应该有 4 个单独的表,但让我向您展示如何使用两个表和一个简单的 SQL 查询来实现这一点。
一张表保存分数,一张表保存我们的值。
ScoreValues
-----------
ID | Value
A+ | 4.3
A | 4.0
B | 3.0
C+ | 2.3
C | 2.0
D | 1.0
Scores
------
StudentID | Subject | Score
ANN | ENG | A+
ANN | LANGUAGE | A+
ANN | PHY | C
ANN | CHE | A+
ANN | BIO | A+
ANN | MATH | A+
JOHN | ENG | B+
JOHN | LANGUAGE | C
JOHN | PHY | A
JOHN | CHE | A+
JOHN | BIO | B
JOHN | MATH | C+
select Count(Subject) as AplusGradeCount, Student
from Scores,ScoreValues
where Scores.Score=ScoreValues.Value and
ScoreValues.Value > 4.0
Group By Student
QueryResults
------------
AplusGradeCount | Student
5 | ANN
1 | JOHN
无论如何,我强烈建议你花时间了解数据库规范化。适当规范化的数据库将使数据查询变得更加容易。