数据库复习总结(16)-case关键字(数据透视)

case语法:

练习1:将性别的0、1显示为男、女

select * from  StudentInfo
--case:对结果集中的列进行判断
--例1:显示学生信息,性别以"男女"显示:
select *,
    case sGender 
    when 1 then ''
    when 0 then '' end as 性别
from StudentInfo
View Code

结果:

练习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
View Code

练习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
View Code

练习:数据透视

 --班级  男生  女生
--    青龙     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 endfrom 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
View Code

 

转载于:https://www.cnblogs.com/mhq-martin/p/8178739.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值