SQL Server CASE WHEN语句问题:生成max_mark列代码失效求助
解决CASE WHEN生成max_mark列的SQL语法问题
你的代码无法运行的核心原因是缺少FROM子句,没有指定要查询的Students表。修正后的完整SQL代码如下:
SELECT Name, CASE WHEN marks < 10 THEN 9 WHEN marks < 20 THEN 19 WHEN marks < 30 THEN 29 WHEN marks < 40 THEN 39 WHEN marks < 50 THEN 49 WHEN marks < 60 THEN 59 WHEN marks < 70 THEN 69 WHEN marks < 80 THEN 79 WHEN marks < 90 THEN 89 ELSE 99 END AS max_mark FROM Students;
另外可以用数学计算简化逻辑,替代重复的CASE WHEN判断,效果和原逻辑完全一致:
SELECT Name, FLOOR(marks / 10) * 10 + 9 AS max_mark FROM Students;
逻辑说明
通过FLOOR(marks / 10)提取分数的十位整数部分,乘以10后加9,直接得到对应分数区间的最大值,比如分数为17时,FLOOR(17/10)=1,计算后得到1*10+9=19,和原CASE逻辑结果一致。
内容的提问来源于stack exchange,提问作者Vinay Jadli
相关产品推荐
相关产品推荐

