case语法:
练习1:将性别的0、1显示为男、女
select * from StudentInfo --case:对结果集中的列进行判断 --例1:显示学生信息,性别以"男女"显示: select *, case sGender when 1 then ‘男‘ when 0 then ‘女‘ end as 性别 from StudentInfo
结果:
练习2:显示成绩为“优、良、中、差”
--例2:将学生分数显示成等级 >=90 优,>=80 良,>=60 中,其它 差 select *, case when scoreValue>=60 and scoreValue<80 then ‘中‘ when scoreValue>=90 then ‘优‘ when scoreValue>=80 then ‘良‘ else ‘差‘ end as 等级 from ScoreInfo
练习3:统计学生的语文、数学、英语的成绩(视图、聚合函数)
--查询学生姓名、科目名称、成绩(构建视图) --行转列(数据透视) --统计学生的语文、数学、英语的成绩 create view Student_Score as select stu.sName,sub.sTitle,score.scoreValue from ScoreInfo score inner join SubjectInfo sub on sub.sId=score.subId inner join StudentInfo stu on stu.sId=score.stuId select * from Student_Score --查询视图 例子 --姓名 语文 数学 英语 --小笼包 100 89 92.5 --数据透视(行转列,列转行) select sName 姓名, --如果当前的STitle的值是"语文",则输出ScoreValue case sTitle when ‘语文‘ then scoreValue end 语文, case when sTitle=‘数学‘ then scoreValue end 数学, case sTitle when ‘英语‘ then scoreValue end 英语 from Student_Score select sName 姓名, --如果当前的STitle的值是"语文",则输出ScoreValue --多行合并成一行(聚合函数) max(case sTitle when ‘语文‘ then scoreValue end) 语文, min(case when sTitle=‘数学‘ then scoreValue end) 数学, sum(case sTitle when ‘英语‘ then scoreValue end) 英语 from Student_Score group by sName
练习:数据透视
--班级 男生 女生 -- 青龙 1 2 --1、创建视图 create view Student_Class_Gender as select cTitle,sGender,COUNT(*) as count1 from StudentInfo stu inner join ClassInfo class on stu.cid=class.cId group by cTitle,sGender select * from Student_Class_Gender --2、转换 --转换 --数据透视(行转列) select cTitle, case sGender when 1 then count1 else 0 end 男, case when sGender=0 then count1 else 0 end 女 from Student_Class_Gender --3、合并 select cTitle, max(case sGender when 1 then count1 else 0 end) 男, max(case when sGender=0 then count1 else 0 end) 女 from Student_Class_Gender group by cTitle