我的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做到这一点?
答案 0 :(得分:3)
首先:它是一个概念上不好的想法,要在VARCHAR字段中对数字进行求和(或以任何方式进行数学处理)。最好将它们存储到数字字段(并且对于不适用的情况具有不同的字段)。 (实际上我很惊讶MySQL让你甚至可以在VARCHAR上使用SUM)
但我认为你无法改变它,所以试试这个:
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
答案 1 :(得分: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
首先,你需要检查是否至少有一个非数字字段,如果'是'则返回空白,否则计算聚合。