一、 基本表达式
(case when {条件表达式} then {结果表达式}
when {条件表达式} then {结果表达式}
when {条件表达式} then {结果表达式}
else {结果表达式} end) as 字段名
要注意不要漏了else 和end
二、 用法
1. 创建一个新字段,其取值由另外一个字段的取值确定。
例如,有如下数据,需要创建一个新列“评价”,根据考试成绩确定其评价结果,
成绩>=90, 优秀
90>成绩>=70, 良好
70>成绩>=60, 及格
成绩<60, 不及格
姓名 | 成绩 | 评价 |
张三 | 91 | |
李四 | 80 | |
王二 | 73 | |
大哥 | 66 | |
小弟 | 52 |
SQL语法如下:
Select (case when 成绩>=90 then ‘优秀’
when 成绩>=70 then ‘良好’
when 成绩>=60 then ‘及格’
else ’不及格‘ end) as 评价
2. 将长表数据转化为宽表数据
有以下表哥数据,需要将各个科目的值放到字段上去
姓名 | 科目 | 成绩 |
张三 | 语文 | 91 |
张三 | 数学 | 80 |
张三 | 英语 | 73 |
张三 | 物理 | 96 |
张三 | 化学 | 52 |
形成如下格式:
姓名 | 语文 | 数学 | 英语 | 物理 | 化学 |
张三 | 91 | 80 | 73 | 96 | 52 |
SQL 语法为:
Select sum(case when 科目=‘语文’ then 成绩 else 0 end)as 语文成绩,
sum(case when 科目=‘数学’ then 成绩 else 0 end)as 数学成绩,
sum(case when 科目=‘语文’ then 成绩 else 0 end)as 英语成绩,
sum(case when 科目=‘数学’ then 成绩 else 0 end)as 物理成绩
from table 成绩表
group by 姓名;