1

我有一个简单的一般加权平均计算SELECT

SELECT ROUND(SUM((G.UnitsAcademic*GD.Grade))/SUM(G.UnitsAcademic),3) AS 'GWA'
FROM Gradesheet G 
INNER JOIN GradeSheetDetail AS GD 
    ON GD.GradesheetId=G.GradesheetId

但是,有些学生有非数字成绩(例如“无考试”)或空白成绩。上面的代码仍然计算并返回一个值。

当计算中涉及非数字值时,我希望它返回一个空白(“”)。SQL有没有办法做到这一点?

4

2 回答 2

3

所以首先:在 VARCHAR 字段中拥有应求和(或以任何方式进行数学处理)的数字在概念上是一个坏主意。最好将它们存储到数字字段中(并且在它们不适用的情况下使用不同的字段)。(事实上​​,我很惊讶 MySQL 甚至可以让你在 VARCHAR 上求和)

但我认为你不能改变它,所以试试这个:

select CASE WHEN SUM(GD.Grade) > 0
            THEN ' ' 
            ELSE SELECT ROUND(SUM((G.UnitsAcademic*GD.Grade))/SUM(G.UnitsAcademic),3) 
            END AS 'GWA' 
            FROM Gradesheet G 
            INNER JOIN GradeSheetDetail AS GD 
                  ON GD.GradesheetId=G.GradesheetId
于 2012-04-09T05:17:22.570 回答
2

尝试这个:

SELECT 
    CASE 
        WHEN 
            MAX(CASE WHEN GD.Grade = 'No Grade' OR GD.Grade = ' ' THEN 1 ELSE 0 END) = 1 THEN ' '
        ELSE 
            ROUND(SUM((G.UnitsAcademic*GD.Grade))/SUM(G.UnitsAcademic),3)  
    END AS 'GWA'  
FROM Gradesheet G  
INNER JOIN GradeSheetDetail AS GD  
      ON GD.GradesheetId = G.GradesheetId 

首先,您需要检查是否至少有一个非数字字段,如果“是”则返回空白,否则计算聚合。

于 2012-04-09T05:23:24.583 回答