zoukankan      html  css  js  c++  java
  • oracle Sql 行转列 方式

    姓名 课程 分数
    张三 语文 74
    张三 数学 83
    张三 物理 93
    李四 语文 74
    李四 数学 84
    李四 物理 94
     
    想变成(得到如下结果):
     
    姓名 语文 数学 物理
    ---- ---- ---- ----
    李四 74   84   94
    张三 74   83   93
    -------------------
     
    创建表:
    create table stu_score(
    name varchar(20),
    cource varchar(20),
    score int
    );
    INSERT INTO stu_score VALUES('zhangsan', '数学', 76);
    INSERT INTO stu_score VALUES('zhangsan', '语文', 77);
    INSERT INTO stu_score VALUES('zhangsan', '英语', 66);
    INSERT INTO stu_score VALUES('lisi', '数学', 45);
    INSERT INTO stu_score VALUES('lisi', '语文', 67);
    INSERT INTO stu_score VALUES('lisi', '英语', 99);
     
    步骤:
    1. 按姓名分组,分组查询字段为姓名和最大值
    2. 在最大值中设置:
      1. 如果你想查询语文成绩,那么就通过case或者if设置为正常值,将其与的分数设置为0
      2. 对这个值取sum或者max
    3、IF(id='某值',value1,value2)
           value1:true时取值
           value2:false时取值
    4、如果在group by后加上WITH ROLLUP 将会统计出总值。
    写法:
    SELECT s.name,SUM(IF(s.courcr='数学',score,0)) AS 数学,SUM(IF(s.courcr='语文',score,0)) AS 语文 ,SUM(IF(s.courcr='英语',score,0)) AS 英语 FROM stu_score s GROUP BY s.name;
     
     
     
     
     
     
     
    sql:
    SELECT st.true_name,aq.id ,aua.answer_score

    FROM assess a

    JOIN assess_paper    ap  ON a.paper_id=ap.id

    JOIN assess_question aq  ON aq.paper_id=ap.id

    JOIN assess_rule_paper arp ON arp.assess_id=a.id

    JOIN assess_rule                ar  ON arp.rule_id=ar.id

    JOIN assess_user_answeraua ON aq.id=aua.question_id

    JOIN student st  ON st.user_id=aua.user_id

    JOIN classroom       cr ON st.class_id=cr.class_id

    JOIN center          c ON cr.center_id=c.center_id

    JOIN series_class    sc ON sc.series_class_name=cr.series_name

     
    结果:
    true_nameidanswer_score
    冯慧    15
    冯慧    24
    冯慧    33
    冯慧    42
    冯慧    51
    张瑞雪11
    张瑞雪21
    张瑞雪31
    张瑞雪41
    张瑞雪51
    杨玉茹13
    杨玉茹23
    杨玉茹33
    杨玉茹43
    杨玉茹53
    杨月圆14
    杨月圆24
    杨月圆34
    杨月圆44
    杨月圆54
    罗妃15
    罗妃25
    罗妃35
    罗妃45
    罗妃55
    唐志琦15
    唐志琦25
    唐志琦35
    唐志琦45
    唐志琦55
    刘江波15
    刘江波25
    刘江波35
    刘江波45
    刘江波55
     
    行转列的sql:
    SELECT true_name AS 姓名,
    SUM(IF(id='1',answer_score,0)) AS 问题1,
    SUM(IF(id='2',answer_score,0)) AS 问题2,
    SUM(IF(id='3',answer_score,0)) AS 问题3,
    SUM(IF(id='4',answer_score,0)) AS 问题4,
    SUM(IF(id='5',answer_score,0)) AS 问题5
    FROM (
    SELECT st.true_name,aq.id ,aua.answer_score
    FROM assess a
    JOIN assess_paper    ap  ON a.paper_id=ap.id
    JOIN assess_question aq  ON aq.paper_id=ap.id
    JOIN assess_rule_paper arp ON arp.assess_id=a.id
    JOIN assess_rule                ar  ON arp.rule_id=ar.id
    JOIN assess_user_answeraua ON aq.id=aua.question_id
    JOIN student st  ON st.user_id=aua.user_id
    JOIN classroom       cr ON st.class_id=cr.class_id
    JOIN center          c ON cr.center_id=c.center_id
    JOIN series_class    sc ON sc.series_class_name=cr.series_name
    WHERE ar.rule_name='职业发展顾问的满意度调查php1301'
    AND c.center_name='北京亚运村中心'
    ) wsf
    GROUP BY true_name  WITH ROLLUP ;
     
    结果:
     
  • 相关阅读:
    jQuery的鼠标悬停时放大图片的效果
    判断一个字符串在另一个字符串中出现的次数
    .net中几个经常用到的字符串的截取
    云服务器 ECS CentOS 7 下重启 sshd 服务操作方法
    博客生涯开始咯
    Json 转 Map 的几种方式
    JS 折线图
    CSS样式优先级
    Arrays.asList 数组转集合 java.lang.UnsupportedOperationException错误
    Netty 笔记
  • 原文地址:https://www.cnblogs.com/zhuanxin/p/15124534.html
Copyright © 2011-2022 走看看