2013-10-03 42 views
0

我必須得到我工作地點的學生的最終成績。從查詢中排除0值

該查詢工作得很好,除了如果有一個0值,它包括它,並且這不會發生。我如何從查詢中排除0,如果我沒有弄錯,排除的0必須來自查詢中的AVG。

這裏是我的查詢:

SELECT 
gbc.StudentID as [Student ID], 
per.FirstName + ' ' + per.MiddleName + ' ' + per.LastName as [Student Name], 
gbc.ClassID as [Class ID], 
cls.Name as [Class Name], 
ROUND(SUM(gbc.weightedgrade),0) as [Final Grade] 
FROM (SELECT 
    gg.ClassID, 
    gg.StudentID, 
    ga.AssessmentId, 
    ga.Title , 
    AVG(gg.ReceivedPoints * ga.Weight/100.0) as weightedgrade 
FROM GbkAssessments as ga INNER JOIN GbkGrades as gg ON ga.AssessmentID = gg.AssessmentID AND ga.ClassID = gg.ClassID 
JOIN Classes as cls on ga.classID = cls.classID JOIN GbkSummary as gbs on ga.classID = gbs.classID 
WHERE gg.StudentID = 1201417 and cls.YearID = 251 and gbs.TermID = 1 
GROUP BY gg.StudentID, gg.ClassID, ga.AssessmentId, ga.Title) as gbc JOIN Classes as cls on gbc.classID = cls.classID 
join Person as Per on Per.PersonID = gbc.StudentID join Person_Student as PS on Per.PersonID = PS.StudentID 
GROUP BY gbc.StudentID, gbc.ClassID, cls.Name, per.FirstName, per.LastName, per.MiddleName 
ORDER BY gbc.ClassID ASC 

我的查詢包括一些評估是存在,但沒有一個值尚未0的,例如尚未應用了白卷,那一個不是招功課沒有被檢查過。

如何從帳戶中刪除這些值?有沒有AVGIFNOTNULL或類似的東西?

+0

AVG忽略空值。嘗試在WHERE子句中添加一個附加條件AND gg.ReceivedPoints * ga.Weight <> 0'。 – krokodilko

回答

0
 AVG (CASE WHEN Value <> 0 THEN Value ELSE NULL END) 

     SELECT 
     gbc.StudentID as [Student ID], 
     per.FirstName + ' ' + per.MiddleName + ' ' + per.LastName as [Student Name], 
     gbc.ClassID as [Class ID], 
     cls.Name as [Class Name], 
     CASE WHEN gbc.weightedgrade IS NOT NULL THEN ROUND(SUM(gbc.weightedgrade),0) ELSE NULL END as [Final Grade] 
     FROM (SELECT 
      gg.ClassID, 
      gg.StudentID, 
      ga.AssessmentId, 
      ga.Title , 
      CASE WHEN gg.ReceivedPoints IS NOT NULL AND ga.Weight IS NOT NULL 
       THEN 
       AVG(gg.ReceivedPoints * ga.Weight/100.0) 
       ELSE NULL 
       END as weightedgrade 
     FROM GbkAssessments as ga INNER JOIN GbkGrades as gg ON ga.AssessmentID = gg.AssessmentID AND ga.ClassID = gg.ClassID 
     JOIN Classes as cls on ga.classID = cls.classID JOIN GbkSummary as gbs on ga.classID = gbs.classID 
     WHERE gg.StudentID = 1201417 and cls.YearID = 251 and gbs.TermID = 1 
     GROUP BY gg.StudentID, gg.ClassID, ga.AssessmentId, ga.Title) as gbc JOIN Classes as cls on gbc.classID = cls.classID 
     join Person as Per on Per.PersonID = gbc.StudentID join Person_Student as PS on Per.PersonID = PS.StudentID 
     GROUP BY gbc.StudentID, gbc.ClassID, cls.Name, per.FirstName, per.LastName, per.MiddleName 
     ORDER BY gbc.ClassID ASC 
+0

哪裏有你的平均值,你想排除任何零,你可以使用Case語句,希望這會有幫助 –

+0

你可以把這個案例放在我的查詢中,這樣我就可以更好地理解你想說什麼嗎? – codeninja

+0

林不知道確切地說哪些字段可以在你的數據爲空,但從這段代碼中確定你會有一些想法可以是空的任何東西,可以影響你的計算替換爲空。 –

0

我想應該是這樣的

添加此到

and AVG(gg.ReceivedPoints * ga.Weight/100.0) <>0