zoukankan      html  css  js  c++  java
  • Oracle行列转换

    在oracle中通常会遇到这样的问题,需要将行转换成列,如图:

        

      

    一般通常用的函数有以下三种:

     decode:

     case when:

     pivot:

     --oracle 实现行转列
      --创建测试表
      CREATE TABLE student_score(
      name varchar2(20),
      subject varchar2(20),
      score number(4,1)
      );
      --插入测试数据
      INSERT INTO student_score (name,subject,score) values('张三','语文',89);
      INSERT INTO student_score (name,subject,score) values('张三','数学',79);
      INSERT INTO student_score (name,subject,score) values('张三','英语',91);
      INSERT INTO student_score (name,subject,score) values('李四','语文',90);
      INSERT INTO student_score (name,subject,score) values('李四','数学',99);
      INSERT INTO student_score (name,subject,score) values('李四','英语',59);
      INSERT INTO student_score (name,subject,score) values('王五','语文',79);
      INSERT INTO student_score (name,subject,score) values('王五','数学',100);
      INSERT INTO student_score (name,subject,score) values('王五','英语',80);
      INSERT INTO student_score (name,subject,score) values('赵六','语文',86);
      INSERT INTO student_score (name,subject,score) values('赵六','数学',88);
      INSERT INTO student_score (name,subject,score) values('赵六','英语',89);
     --decode 实现行转列
     select name as "姓名" ,
       sum(decode(subject,'语文',nvl(score,0),0)) as "语文" ,
       sum(decode(subject,'数学',nvl(score,0),0)) as "数学",
       sum(decode(subject,'英语',nvl(score,0),0)) as "英语" 
       from student_score
         group by name; 
         
      --case when 行转列
      select name as "姓名",
             sum(case when subject='语文'
                 then nvl(score,0)
                  else 0
                  end ) as "语文",
             sum(case when subject='数学'
                 then nvl(score,0)
                  else 0
                  end )as "数学",
              sum(case when subject='英语'
                 then nvl(score,0)
                  else 0
                  end )as "英语"
             from student_score 
             group by name;
       --pivot 实现行转列
       select * from (select name,subject,score from student_score group by name,subject,score)
        pivot(
           sum(score) for subject in('语文'as "语文",'数学' as "数学",'英语' as "英语")
        );
  • 相关阅读:
    移动端拖拽
    原生js增加,移除类名
    js自执行函数
    页面加载初始化方法
    writing-mode,文字竖直书写,字符之间距离,单词之间距离
    滚动鼠标达到一点范围时的跑秒效果,从0开始一直加在规定时间内加到最大值
    haley解决中文字段名称字数不同时两端对齐的问题
    常用的一些css实现的小效果,比如三角形,小三角,阴影等
    html几个比较常用的颜色名称
    Spring--通过注解来配置bean
  • 原文地址:https://www.cnblogs.com/Jims2016/p/5526183.html
Copyright © 2011-2022 走看看