oracle 函数中的行转列
来源:互联网 发布:java流程开发工具 编辑:程序博客网 时间:2024/06/10 20:46
今天碰到一个行转列的问题,但是在网上看到很多的是列转行的,最后终于找到一个行转列的,在这里写一下,一来了方便自己看,二来了也方便有需要的朋友了参考下,我这里只是举个列子,具体还没深入研究。
主要是两种方法:
第一种:
这是原数据,
SQL> select * from s_student_result;
NAME ENGLISH MATH PHYSISC CHINESE TESTDATE
------------------------ ---------- ---------- ---------- ---------- -------------
张三 70 80 90 90 12-12月-11
李四 80 70 80 90 12-12月-11
王五 60 80 80 85 01-1月 -12
需要转换为:
NAME COURCE SCORE TESTDATE
------------------------ -------------- ---------- --------------
张三 chinese 90 12-12月-11
张三 english 70 12-12月-11
张三 math 80 12-12月-11
张三 pjysisc 90 12-12月-11
李四 chinese 90 12-12月-11
李四 english 80 12-12月-11
李四 math 70 12-12月-11
李四 pjysisc 80 12-12月-11
王五 chinese 85 01-1月 -12
王五 english 60 01-1月 -12
王五 math 80 01-1月 -12
NAME COURCE SCORE TESTDATE
------------------------ -------------- ---------- --------------
王五 pjysisc 80 01-1月 -12
那么利用oracle中的union,sql语句如下:
select name,'english' cource,english as score ,testdate from s_student_result
union select name,'math' cource,math as score, testdate from s_student_result t
union select name,'pjysisc' cource,physisc as score ,testdate from s_student_result
union select name,'chinese' cource,chinese as score, testdate from s_student_result
第二种:
创建一个中间表
create table TEST_LH
(
NAME VARCHAR2(20),
COURCE VARCHAR2(20),
SCORE NUMBER,
TESTDATE DATE
)
然后插入语句
insert all
into test_lh values(name,'english',english,testdate)
into test_lh values(name,'math',math,testdate)
into test_lh values(name,'physisc',physisc,testdate)
into test_lh values(name,'chinese',chinese,testdate)
select name,t.english,t.math,t.physisc,t.chinese ,t.testdate from s_student_result t
commit;
然后查询结果如下:
NAME COURCE SCORE TESTDATE
---------------------------------------- ---------------------------------------- ---------- -------
张三 english 70 12-12月-11
李四 english 80 12-12月-11
王五 english 60 01-1月 -12
张三 math 80 12-12月-11
李四 math 70 12-12月-11
王五 math 80 01-1月 -12
张三 physisc 90 12-12月-11
李四 physisc 80 12-12月-11
王五 physisc 80 01-1月 -12
张三 chinese 90 12-12月-11
李四 chinese 90 12-12月-11
NAME COURCE SCORE TESTDATE
---------------------------------------- ---------------------------------------- ---------- -------
王五 chinese 85 01-1月 -12s
列转行是相反的,这里就只写下sql语句(两种),
select t.name,
sum(decode(t.cource,'english',t.score)) as english,
sum(decode(t.cource,'math',t.score)) as math,
sum(decode(t.cource,'physisc',t.score)) as physisc,
sum(decode(t.cource,'chinese',t.score))as chinese,
t.testdate
from test_lh t
group by t.name,t.testdate
select t.name,
max(case cource when 'english' then score else 0 end) english,
max(case cource when 'math' then score else 0 end) math,
max(case cource when 'physisc' then score else 0 end) physisc,
max(case cource when 'chinese' then score else 0 end) chinese,
t.testdate
from test_lh t
group by t.name,t.testdate
- oracle 函数中的行转列
- Oracle中的时间函数
- oracle中的函数
- Oracle中的格式化函数
- Oracle中的格式化函数
- oracle中的函数
- Oracle中的格式化函数
- oracle中的函数据
- Oracle中的to_date()函数
- 3.Oracle中的函数
- ORACLE 中的DECODE函数
- Oracle中的Split函数
- Oracle中的to_date()函数
- Oracle中的to_date()函数
- Oracle中的一些函数
- oracle中的分析函数
- Oracle中的To_date函数
- Oracle 中的to_date()函数
- 问题小结(12)-让文字颜色随焦点变化
- .Net那点事儿系列:C#操作Xml:通过XmlDocument读写Xml文档
- sprintf()函数
- 7z介绍、7z命令在linux的安装和使用、7z移植到嵌入式linux的系列专题汇总
- asp.net 调用远程webservice(手机归属地查询)
- oracle 函数中的行转列
- 如何用W7100A实现DDNS客户端(一)
- 初识redis
- 利用89C51做音乐盒
- Json - 使用json-lib解析json字符串(火车票务返回的json串)的例子
- AndroidAPI开发指南2.x
- 介绍一下Hibernate的二级缓存
- IOS 自定义导航栏背景图片和颜色
- ractional clearcase 查询活动变更集问题