zoukankan      html  css  js  c++  java
  • 数据库复习总结(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

  • 相关阅读:
    Linq to OBJECT延时标准查询操作符
    LINQ to XML
    动态Linq(结合反射)
    HDU 1242 dFS 找目标最短路
    HDu1241 DFS搜索
    hdu 1224 最长路
    BOJ 2773 第K个与m互质的数
    ZOJ 2562 反素数
    2016 ccpc 杭州赛区的总结
    bfs UESTC 381 Knight and Rook
  • 原文地址:https://www.cnblogs.com/mhq-martin/p/8178739.html
Copyright © 2011-2022 走看看