MS Access计数查询不会产生想要的结果

时间:2015-02-19 17:15:59

标签: ms-access

我有一张表(tblExam),显示了如下设计的考试数据分数:

考试名称:字符串
分数:数字(pecent)

基本上我试图通过考试名称拉取记录,其中得分低于特定数量(在我的情况下为0.695)。

我使用以下语句来获得结果:

SELECT DISTINCTROW tblExam.name, Count(tblExam.name) AS CountOfName
FROM tblExam WHERE (((tblExam.Score)<0.695))
GROUP BY tblExam.name;

这样可以正常工作但不显示0记录超过0.695的考试;换句话说,我得到了这个:

Exam Name     count    
firstExam       2  
secondExam      1  
thirdExam       3  

计数为0且任何得分高于0.695的考试都不会显示。我想要的是这样的:

Exam Name     count  
firstExam       2  
secondExam      1  
thirdExam       3  
fourthExam      0  
fifthExam       0  
sixthExam       2  
.  
..  
.etc...  

我希望我在这里有意义。我认为我需要一些LEFT JOIN来显示所有考试名称,但我无法提出正确的语法。

2 个答案:

答案 0 :(得分:0)

我是否发现了矛盾?该查询要求结果&lt; 0.695但您的文字说您也在寻找结果&gt; 0.695。也许我不明白。这是否能满足您的需求:

SELECT DISTINCTROW tblExam.ExamName, Count(tblExam.ExamName) AS CountOfExamName
FROM tblExam
WHERE (((tblExam.Score)<0.695 Or (tblExam.Score)>0.695))
GROUP BY tblExam.ExamName;

答案 1 :(得分:0)

您似乎希望显示所有名称组,并在每个组中显示Score < 0.695的计数。所以我认为您应该将< 0.695WHERE移到Count()表达式 - 实际上删除WHERE子句。

SELECT
    e.name,
    Count(IIf(e.Score < 0.695, 1, Null)) AS CountOfName
FROM tblExam AS e
GROUP BY e.name;

这是有效的,因为Count()只计算非空值。如果这看起来更清楚,您可以使用Sum()代替Count()

    Sum(IIf(e.Score < 0.695, 1, 0)) AS CountOfName

注意DISTINCTROWGROUP BY查询中没有用,因为如果没有它,分组会使行唯一。所以我从查询中删除了DISTINCTROW