Oracle把成绩行的方式转成列

1、表格中有如下数据

姓名 科目 一月 二月 三月
张三  语文 30 40 50
张三  数学  56 65 78
张三  英语 28 86 48
李四 语文 31 41 51
李四 数学  57 66 79
李四 英语 29 87 49

先要转换成

姓名 一月语文 二月语文 三月语文 一月数学 二月数学 三月数学 一月英语 二月英语 三月英语
李四 31 41 51 57 66 79 29 87 49
张三 30 40 50 56 65 78 28 86 48

2、建测试数据

CREATE TABLE GRADE_TABLE(
   STU_NAME VARCHAR(20),
   SUBJECT VARCHAR(20),
   MONTH1 INT DEFAULT 0, --一月
   MONTH2 INT DEFAULT 0,--二月
   MONTH3 INT DEFAULT 0
);
insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('张三','语文','30','40','50');
insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('张三','数学','56','65','78');
insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('张三','英语','28','86','48');
insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('李四','语文','31','41','51');
insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('李四','数学','57','66','79');
insert into GRADE_TABLE(STU_NAME,SUBJECT,MONTH1,MONTH2,MONTH3) values('李四','英语','29','87','49');

3、处理SQL

select stu_name,sum(一月语文 ) 一月语文 ,sum(二月语文 ) 二月语文,sum(三月语文 ) 三月语文
,sum(一月数学 ) 一月数学 ,sum(二月数学 ) 二月数学,sum(三月数学 ) 三月数学
,sum(一月英语 ) 一月英语 ,sum(二月英语 ) 二月英语,sum(三月英语 ) 三月英语
from(
select stu_name,sum(case subject when '语文' then month1 end) as 一月语文
,sum(case subject when '语文' then month2 end) as 二月语文
,sum(case subject when '语文' then month3 end) as 三月语文
,sum(case subject when '数学' then month1 end) as 一月数学
,sum(case subject when '数学' then month2 end) as 二月数学
,sum(case subject when '数学' then month3 end) as 三月数学
,sum(case subject when '英语' then month1 end) as 一月英语
,sum(case subject when '英语' then month2 end) as 二月英语
,sum(case subject when '英语' then month3 end) as 三月英语
from GRADE_TABLE
group by stu_name,subject
) group by stu_name  --danielinbiti
时间: 2024-11-05 04:05:36

Oracle把成绩行的方式转成列的相关文章

关于ORACLE的串行化隔离级别--来自ORACLE概念手册

为了描述同时执行的多个事务如何实现数据一致性,数据库研究人员定义了被 称为串行化处理(serializability)的事务隔离模型(transaction  isolation model).当所有事务都采取串行化的模式执行时,我们可以认为同一时间只有 一个事务在运行(串行的),而非并发的 以串行化模式对事务进行隔离的效果很好,但在此种模式下应用程序的效率将 大大降低.将并行执行的事务完全隔离意味着即便当前只存在一个对表进行查 询(query)的事务,其他事务 也不能再对此表进行插入(inse

Oracle Sql三种连接方式

Oracle执行计划详解 --- 一.相关的概念 Rowid的概念 Recursive Sql概念 Predicate(谓词) DRiving Table(驱动表) Probed Table(被探查表) 组合索引(concatenated index) 可选择性(selectivity) 二.oracle访问数据的存取方法 1) 全表扫描(Full Table Scans, FTS) 2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup) 3)索引扫

利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理 2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论:0 | 浏览:45 | 该类在MVC中可以方便管理配置信息,可以直接把Model储存进数据库或者从数据库去除数据转为Model. 1 何为配置项目? 比如网站的名称,页脚信息,meta中的KeyWord信息等,如果不想硬编码到网页里,就需要使用配置文件进行储存,通常都是储存到数据库中.使用的时候读取出来

Hibernate在oracle中ID增长的方式

引用链接:http://blog.csdn.net/w183705952/article/details/7367272 Hibernate在oracle中ID增长的方式 第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MS-SQL,MY-SQL中的自动增长一样,不需要创建触发器,具体的Oracle数据库脚本及hibernate配置文件如下: [1]oracle数据表的创建脚本: Java代码  CREATE TABL

ORACLE 中NUMBER 类型 低精度转换成高精度

例如: 表User中有一个字段 salary  Number(10,3), 如果想把字段salary的类型提高精度到salary  Number(10,6),保留六位小数, 解决办法:1,ALTER TABEL USER MODIFY SALARY NUMBER(13,6); 解释:number类型刚开始是,长度10位,3位小数,如果想增加3位小数,对应的长度也必须增加,否则无法修改.所以NUMBER(13,6);这样就可以提高精度了, ORACLE 中NUMBER 类型 低精度转换成高精度

Oracle删除重复行

Oracle删除重复行 分类: ORACLE2010-12-12 17:10 423人阅读 评论(0) 收藏 举报 oracletabledeleteintegerinsert.net 查询及删除重复记录的SQL语句1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select   peopleId from   people group by   peopleId having count(

Oracle锁表 行级锁 表级锁 行级锁

Oracle锁表  行级锁  表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行          ----使用 commit 或 rollback 命令释放锁 ----Oracle 通过使用 INSERT.UPDATE 和 SELECT-FOR UPDATE 语句自动获取行级锁 SELECT-FOR UPDATE 子句  ―在表的一行或多行上放置排他锁  ―用于防止其他用户更新该行 ―可以执行除更新之外的其他操作 ―select * from goods whe

Oracle数据库几种启动方式及查询当前状态

Oracle数据库几种启动方式 1.startup nomount: 非安装启动,这种方式下启动可执行:重建控制文件.重建数据库,读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 2.startup mount (dbname): 安装启动,这种方式启动下可执行:数据库日志归档.数据库介质恢复.使数据文件联机或脱机.重新定位数据文件.重做日志文件. 先执行"nomount",然后打开控制文件,确认数据文件和联机日志文件的位置,

.NET加密方式解析--散列加密

在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念,在这里就不说了. 这一次将会主要讲解.NET的加密方式,接下来将会分别介绍散列加密,对称加密,非对称加密等等加密方式在.NET中的应用,本文主要讲解散列加密在.NET中的应用实例. 一.DotNet散列算法概述 说到散列应该都不会陌生,并且首先都会想到MD5加密,但是对于散列更加深入的了解,恐怕知道的人就不会那么多了.散列算法