Oracle—decode函数行转列
来源:互联网 发布:sql语句求和1到50 编辑:程序博客网 时间:2024/06/11 17:18
文章说明:根据成绩表,对每个学生的成绩数据进项行转列操作,最后每行显示每个学生的各科成绩。
以下是行转列的各个步骤操作。
1、创建学生信息,课程,成绩三张表
CREATE TABLE TB_STUDENT( STUDENTID VARCHAR2(10) PRIMARY KEY, STUNAME VARCHAR2(50), SEX VARCHAR2(8), AGE NUMBER(5) );CREATE TABLE TB_COURSE( COURSEID VARCHAR2(10) PRIMARY KEY, COURSENAME VARCHAR2(10), TEACHER VARCHAR2(10));CREATE TABLE TB_SCORE( SCOREID VARCHAR2(10) PRIMARY KEY, COURSEID VARCHAR2(10), STUDENTID VARCHAR2(10), GRADE NUMBER(10));
2、给三张表插入相应的数据
INSERT INTO TB_STUDENT(STUDENTID,STUNAME,SEX,AGE) VALUES('20141101','SIM','BOY',22);INSERT INTO TB_STUDENT(STUDENTID,STUNAME,SEX,AGE) VALUES('20141102','MARY','GIRL',22);INSERT INTO TB_STUDENT(STUDENTID,STUNAME,SEX,AGE) VALUES('20141103','SILLY','GIRL',22);INSERT INTO TB_STUDENT(STUDENTID,STUNAME,SEX,AGE) VALUES('20141104','ALICE','GIRL',22);INSERT INTO TB_STUDENT(STUDENTID,STUNAME,SEX,AGE) VALUES('20141105','SAM','BOY',22);insert into tb_course(COURSEID,coursename,teacher) VALUES('1001','MATH','SA');insert into tb_course(COURSEID,coursename,teacher) VALUES('1002','ENGLISH','ALICE');insert into tb_course(COURSEID,coursename,teacher) VALUES('1003','JAVA','BB');INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10001','1001','20141101',99);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10002','1001','20141102',88);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10003','1001','20141103',77);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10004','1001','20141104',98);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10005','1001','20141105',96);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10006','1002','20141101',99);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10007','1002','20141103',99);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10008','1002','20141104',99);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10009','1003','20141102',99);INSERT INTO TB_SCORE(SCOREID,COURSEID,STUDENTID,GRADE) VALUES('10010','1003','20141105',99);
插入后的数据结果如下:
STUDENTID STUNAME SEX AGE---------- -------------------------------------------------- -------- ------20141101 SIM BOY 2220141102 MARY GIRL 2220141103 SILLY GIRL 2220141104 ALICE GIRL 2220141105 SAM BOY 22COURSEID COURSENAME TEACHER---------- ---------- ----------1001 MATH SA1002 ENGLISH ALICE1003 JAVA BBSCOREID COURSEID STUDENTID GRADE---------- ---------- ---------- -----------10001 1001 20041101 9910002 1001 20041102 8810003 1001 20041103 7710004 1001 20041104 9810005 1001 20041105 9610006 1002 20041101 9910007 1002 20041103 9910008 1002 20041104 9910009 1003 20041102 9910010 1003 20041105 99
3、对数据进行行转列操作
select g.studentid 学号,(select stu.stuname from tb_student stu where stu.studentid=g.studentid) AS 姓名,sum(decode(g.courseid,'1001',grade,0)) 数学,sum(decode(g.courseid,'1002',grade,0)) 英语,sum(decode(g.courseid,'1003',grade,0)) javafrom tb_score ggroup by g.studentidorder by g.studentid;
decode函数格式:decode(column,if1,then1,defalut)
表示列如果满足if1的条件,就显示then1的内容,不满足就显示default的值!
sum(decode(...))是对decode返回的数据进行累加
4、通过上面的查询,最后显示的查询结果如下
学号 姓名 数学 英语 JAVA---------- -------------------------------------------------- ---------- ---------- ----------20141101 SIM 99 99 020141102 MARY 88 0 9920141103 SILLY 77 99 020141104 ALICE 98 99 020141105 SAM 96 0 99
以上是通过oracle的decode函数进行的行转列操作,初次写博文,多多指教!
0 0
- Oracle—decode函数行转列
- Oracle行转列 decode函数
- oracle数据库 行转列 用decode函数实现
- oracle decode.oracle 函数用法之decode
- Oracle中Decode()函数
- ORACLE 中的DECODE函数
- oracle中decode函数
- Oracle DECODE函数
- Oracle的DECODE函数
- Oracle decode函数
- Oracle函数Decode
- oracle decode()函数
- oracle-decode函数
- oracle decode函数
- oracle DECODE函数
- oracle中的decode函数
- ORACLE DECODE函数
- oracle函数decode
- UIAlertView和UIActionSheet的IOS8兼容
- Maven之——Nexus私服
- 第十一周项目4
- 多目标跟踪-Multi-Object Tracking
- FPAG学习笔记:BCD码驱动2位数码管(动态扫描)
- Oracle—decode函数行转列
- ARM开发板在WIN7系统下USB无法识别解决方案。
- gets();getschar();fget();
- 第一课 认识类与对象
- 汉诺塔演示程序QBasic版,开博第一帖
- Poj1696 Space Ant
- c#会动的图
- 设计模式笔记-状态模式
- 常见的网络端口号