zoukankan      html  css  js  c++  java
  • Oracle 行转列两种方法

    1.新建一个名为TEST表

    create table TEST(
    STUDENT varchar2(20),
    COURSE varchar2(20),
    SCORE number
    );

    INSERT INTO TEST(STUDENT,COURSE,SCORE) values( '张三','语文',78);
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values ('张三','数学',87 );
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values ('张三','英语',82 );
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values ('张三','物理',90 );
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values( '李四','语文',65 );
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values( '李四','数学',77 );
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values ('李四','英语',65 );
    INSERT INTO TEST(STUDENT,COURSE,SCORE) values( '李四','物理',85 );
    commit;

    表数据如下:

    3.列转行

    方法··1:

    select
    Student,
    decode(Course, '数学', Score) 数学,
    decode(Course, '物理', Score) 物理,
    decode(Course, '英语', Score) 英语,
    decode(Course, '语文', Score) 语文
    from TEST;

    group by分组 后,可以用sum(),max(),min(),avg()等。

    select 
        Student,
        sum(decode(Course, '数学', Score)) 数学,
        sum(decode(Course, '物理', Score)) 物理,
        sum(decode(Course, '英语', Score)) 英语,
        sum(decode(Course, '语文', Score)) 语文
    from 
        TEST 
    group by Student

    方法··2:

    select
        Student,
        sum(case Course when '数学' then Score else null end) 数学,
        sum(case Course when '物理' then Score else null end) 物理,
        sum(case Course when '英语' then Score else null end) 英语,
        sum(case Course when '语文' then Score else null end) 语文
    from 
        TEST 
    group by Student

    效果如下:

    注:sum是求和的意思;比如说里面记录里面有两条张三,列转行显示的结果就会是两个张三的结果之和。

     

    4.case when 嵌套case when 。

     5.case when then else end  的几种用法。

    1、简单的case when语句:

         case sex when ’1' then '男' when ’2’ then '女’else ’其他’ end

    2、复杂的case when语句:

         case when month in (01,02,03) then '第一季度' when month in (04,05,06) then '第二季度' when month in (07,08,09) then '第三季度' when month  in (10,11,12) then ‘第四季度’ end

    值得注意的是,语句只返回第一个符合条件的值,剩下的case部分将会被自动忽略。
    3.  case sex when  months between 444 and 1111  then 'XX' when months between 2222 and 9650 then 'XX’else ’其他’ end

    4.select student,course, case when score >= 90 then '优秀'when score >=60 and score <90 then '良好'  else '不及格' end as "成绩" from system.test ;

    5.case when 与decode的差别就是 ,decode 就是 取等于的值 ,case when 还可以去区间范围的值。

     

    来自:https://blog.csdn.net/rlhua/article/details/24668755

  • 相关阅读:
    2018.12.1 区块链论文翻译
    2018.11.29 区块链论文翻译
    jshell 一个代码片段测试工具(jdk9后新增的功能)
    java 的var 定义变量有点鸡肋...
    小心Math.abs(-2147483648)的坑
    java获取同级目录下的文件
    java获取formdata里的所有参数
    No enclosing instance of type VolatleTest is accessible. Must qualify the allocation with an enclosing instance of type VolatleTest
    if else太多怎么代替,太难维护?可以使用spring-plugin 插件系统
    设计一个泛型的获取数组最大值的函数.并且这个方法只能接受Number的子类并且实现了Comparable接口
  • 原文地址:https://www.cnblogs.com/brianlai/p/10333472.html
Copyright © 2011-2022 走看看