2014-03-13 67 views
1

SQL所做的工作是计算所有已经提交了附加任务的评估并且评估已完成(2013年秋季学期的客观标记为“I”)的每位学员。SQL计数问题

我目前正在专门研究ED495-课程。基本上发生了什么是教授进入评估,并为单个学生/评估而不是仅仅一个文件为作业添加了多个文件(每个文件名创建FileCabinet表中的记录)。因此,当它查看是否存在该学生存在的文件时,它会看到所有这些文件并计算每个文件。这门课只有5名学生。我所期望的那个班级的成绩应该是5,因为每个人都有一份随评估一起提交的论文。

“Count(*)Pool”正在返回所有可能的情况,当我只需要它时基本上会说是,至少有一条记录为该学生并将其计数。

 SELECT Course.CourseN, Course.Sect, COUNT(FileCabinet.TheFile) [Pool] 
     FROM Course 
    INNER JOIN RubricW ON Course.WID = RubricW.WID 
    INNER JOIN Students_CR ON Course.StuID = Students_CR.StuID 
    INNER JOIN FileCabinet ON Course.WID = FileCabinet.WID 
     WHERE Course.Year = 2013 
     AND Course.Semester = 'FA' 
     AND (Students_CR.CR = 'SR' AND Students_CR.Year = 2013 AND Students_CR.Sem = 'FA') 
     AND FileCabinet.TheFile IS NOT Null 
     AND (Obj1 NOT IN('I') OR Obj2 NOT IN('I') OR Obj3 NOT IN('I') OR Obj4 NOT IN('I') OR Obj5 NOT IN('I') OR Obj6 NOT IN('I') OR Obj7 NOT IN('I')) 
    GROUP BY Course.CourseN, Course.Sect 

结果集:

CourseN Sect Pool 
AG232G M1  7 
AT481- M1  9 
CJ234- M1  6 
ED341- M1  4 
ED495- M1  45 
EN232- M1  3 
EN242- M1  2 
EN250G M1  4 
EN430G M1  8 
MK334- M1  2 
MK496- M1  4 
MT398- M1  10 
MU350G M1  7 
PS330- M1  3 
PS344- M1  1 
RP450- M1  5 
SY330- M1  7 
TH330G M1  9 
TH342G M1  2 

和SQL被用来协助审查委员会在拉动随机评估。他们可以通过多种方式进行抽取,这份名单将帮助他们决定他们需要评估的评估数量。

希望我解释得不错。我正在考虑的是限制教授无法从我的VB .NET代码中提交多个文件。如果可能的话,我想阻止。

+0

嘿,我还没有试图把我的头围绕查询,但在快速修复的机会之外:如果你计算(DISTINCT Students_CR.StuID)' – OGHaza

+0

看起来像解决方案。我正在考虑按照原来的方式,我使用了COUNT(*)而不是COUNT(FileCabinet.TheFile)。现在我只是想知道为什么会这样。感谢OGHaza。 – sdo3lg

+0

:P你差点没钱了。我已经发布了它作为答案,以便完全解决它,如果不再评论,我会看看我能做些什么。 – OGHaza

回答

0

使用

COUNT(DISTINCT Students_CR.StuID) 

代替,这样,每个学生将只一次,无论有多少个文件各有计算尝试。