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 などはありますか?

4

2 に答える 2

0

こうあるべきだと思う

これをどこに追加します

and AVG(gg.ReceivedPoints * ga.Weight / 100.0) <>0
于 2013-10-03T22:06:18.257 に答える
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
于 2013-10-03T22:03:21.913 に答える