我有一个学生表,其中一列包含学生获得的成绩(例如A,B,C ...)。我需要为每个年级分配一个数字(例如,A-> 10,B-> 8,C-> 6 ...)
我是sql的新手,我对如何执行此操作一无所知。 我尝试了一种在网上找到的方法:
select letter_grade, case when 'A' then 4 end as lettergrade from students;
但是它不起作用
答案 0 :(得分:4)
您在正确的轨道上:
SELECT
letter_grade,
CASE letter_grade WHEN 'A' THEN 10
WHEN 'B' THEN 8
WHEN 'C' THEN 6
WHEN 'D' THEN 4
ELSE 0 END AS number_grade
FROM students;
答案 1 :(得分:1)
Oracle解决方案(因为它使用Oracle专有功能,因此在其他SQL语言中不起作用)将使用decode()
。此函数将第一个参数与第二个,第四个,第六个等进行比较,当找到匹配项时,它将在匹配后立即返回该参数。如果找不到匹配项,它将返回作为最后一个参数输入的默认值。
select student_id, letter_grade,
decode(letter_grade, 'A', 10, 'B', 8, 'C', 6, 'D', 4, 0) as numeric_grade
from students