2014-03-13 105 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) 

代替,這樣,每個學生將只一次,無論有多少個文件各有計算嘗試。