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

Oracle 行转列两种方法的更多相关文章

  1. 移动oracle数据文件的两种方法

    1.alter database方法该方法,可以移动任何表空间的数据文件. ***关闭数据库***SQL> shutdown immediateDatabase closed.Database ...

  2. Sql将一列数据拆分为多行显示的两种方法

    原始数据与期望结果有表tb, 如下:id          value----------- -----------1           aa,bb2           aaa,bbb,ccc欲按 ...

  3. RAC时间同步的两种方法

    集群时间同步服务在集群中的两个 Oracle RAC 节点上执行以下集群时间同步服务配置.Oracle Clusterware 11g 第 2 版及更高版本要求在部署了 Oracle RAC 的集群的 ...

  4. 【转】oracle 中随机取一条记录的两种方法

    oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...

  5. Python 使用 xlwings 往 excel中写入一列数据的两种方法

    1.准备一个二维列表,然后再range后面不指定任何选项,可以输出该二维列表中数据在一列中显示,如下代码: # -*- coding:utf-8 -*- import xlwings as xw li ...

  6. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...

  7. PyQt(Python+Qt)学习随笔:QTableWidget中表格各列平均分配宽度的两种方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget表格部件中,如果需要实现表格中各列要占满部件中的可用空间,同时实现各列平分 ...

  8. oracle rename数据文件的两种方法

    oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报  分类: oracle(98)  版权声明:本文为博主原创文章,未经博主允许不 ...

  9. CSS多行文字垂直居中的两种方法

    之前写过一篇关于:CSS左右居中对齐的文章,里面提到的两种方法其实也可以引申为垂直居中对齐.写这篇文章是因为要兼容IE6.IE7的问题,我们都知道一行文字时可以通过line-height来设置垂直居中 ...

随机推荐

  1. tomcat一个IP绑定多个域名,不同域名访问不同的应用

    修改conf文件夹下面的server.xml的Engine里面的内容即可原始内容如下: …… <Engine name="Catalina" defaultHost=&quo ...

  2. mysql安装与使用

    一.Mysql官方下载地址:https://www.mysql.com/downloads/ 二.下载 Community Server,这个版本是完全免费的  https://dev.mysql.c ...

  3. Junit入门教程

    做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...

  4. hibernate open session in view 抛出异常解决方法

    在使用open-session-in-view的时候,如果使用不当,有可能抛出两种异常1,NonUniqueObjectException2,在配合spring使用的时候会可能会抛出org.sprin ...

  5. linux定时任务crontab的使用

    crond进程: crond是linux下用来周期性地执行某种任务的一个守护进程,安装操作系统默认会安装此服务工具,并且会自动启动crond进程. 设置定时任务过程: 1. 创建任务文件(.sh) [ ...

  6. CRM——起步

    一.CRM简介 crm 客户关系管理软件 ( Customer Relationship Management ). 二.CRM起步 1.设计表结构和数据库迁移 from django.db impo ...

  7. 10th week task -1

    1:For each ... inFor...in ExamplesFor...of 对以上的内容进行 Examples和Explanation (1)For...in 以任意顺序遍历一个对象的可枚举 ...

  8. ubuntu GITLAB完全导入SVN(提交历史,用户)项目

    从SVN导入到GITLAB目前没有直接的方案,通常需要通过GIT转换:SVN –>GIT –>GITLAB.通过这种方式,将SVN的提交历史,用户信息一并导入到gitlab 注:本文只适用 ...

  9. PHP time() date() strtotime()日期函数总结

    日期函数总结—— 一.返回时间戳——若整体数值超出计算机能力范围,返回空. 1. time();返回当前的 Unix 时间戳  例:$a=time(); var_dump($a); //输出:int( ...

  10. show_sql和format_sql

    <property name="show_sql">true</property> <property name="hibernate.fo ...