Oracle—decode函数行转列
文章说明:根据成绩表,对每个学生的成绩数据进项行转列操作,最后每行显示每个学生的各科成绩。 以下是行转列的各个步骤操作。 1、创建学生信息,课程,成绩三张表 CREATE TABLE TB_STUDENT( STUDENTID VARCHAR2(10) PRIMARY KEY, STUNAME VARCHAR2(50), SE
文章说明:根据成绩表,对每个学生的成绩数据进项行转列操作,最后每行显示每个学生的各科成绩。
以下是行转列的各个步骤操作。
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 22 20141102 MARY GIRL 22 20141103 SILLY GIRL 22 20141104 ALICE GIRL 22 20141105 SAM BOY 22 COURSEID COURSENAME TEACHER ---------- ---------- ---------- 1001 MATH SA 1002 ENGLISH ALICE 1003 JAVA BB SCOREID COURSEID STUDENTID GRADE ---------- ---------- ---------- ----------- 10001 1001 20041101 99 10002 1001 20041102 88 10003 1001 20041103 77 10004 1001 20041104 98 10005 1001 20041105 96 10006 1002 20041101 99 10007 1002 20041103 99 10008 1002 20041104 99 10009 1003 20041102 99 10010 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)) java from tb_score g group by g.studentid order by g.studentid;
decode函数格式:decode(column,if1,then1,defalut)
表示列如果满足if1的条件,就显示then1的内容,不满足就显示default的值!
sum(decode(...))是对decode返回的数据进行累加
4、通过上面的查询,最后显示的查询结果如下
学号 姓名 数学 英语 JAVA ---------- -------------------------------------------------- ---------- ---------- ---------- 20141101 SIM 99 99 0 20141102 MARY 88 0 99 20141103 SILLY 77 99 0 20141104 ALICE 98 99 0 20141105 SAM 96 0 99
以上是通过oracle的decode函数进行的行转列操作,初次写博文,多多指教!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

要查询 Oracle 表空间大小,请遵循以下步骤:确定表空间名称,方法是运行查询:SELECT tablespace_name FROM dba_tablespaces;查询表空间大小,方法是运行查询:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

Oracle 视图加密允许您加密视图中的数据,从而增强敏感信息安全性。步骤包括:1) 创建主加密密钥 (MEk);2) 创建加密视图,指定要加密的视图和 MEk;3) 授权用户访问加密视图。加密视图工作原理:当用户查询加密视图时,Oracle 使用 MEk 解密数据,确保只有授权用户可以访问可读数据。

创建 Oracle 表涉及以下步骤:使用 CREATE TABLE 语法指定表名、列名、数据类型、约束和默认值。表名应简洁、描述性,且不超过 30 个字符。列名应描述性,数据类型指定列中存储的数据类型。NOT NULL 约束确保列中不允许使用空值,DEFAULT 子句可指定列的默认值。PRIMARY KEY 约束标识表的唯一记录。FOREIGN KEY 约束指定表中的列引用另一个表中的主键。请参见示例表 students 的创建,其中包含主键、唯一约束和默认值。

数据导入方法:1. 使用 SQLLoader 实用程序:准备数据文件、创建控制文件、运行 SQLLoader;2. 使用 IMP/EXP 工具:导出数据、导入数据。提示:1. 大数据集推荐 SQL*Loader;2. 目标表应存在,列定义匹配;3. 导入后需验证数据完整性。

在 Oracle 中查看实例名的方法有三种:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通过操作系统的任务管理器、Oracle Enterprise Manager 或检查环境变量 (Linux 上的 ORACLE_SID)。

Oracle 安装失败的卸载方法:关闭 Oracle 服务,删除 Oracle 程序文件和注册表项,卸载 Oracle 环境变量,重新启动计算机。若卸载失败,可使用 Oracle 通用卸载工具手动卸载。

在 Oracle 中获取时间有以下方法:CURRENT_TIMESTAMP:返回当前系统时间,精确到秒。SYSTIMESTAMP:比 CURRENT_TIMESTAMP 更准确,精确到纳秒。SYSDATE:返回当前系统日期,不含时间部分。TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'): 将当前系统日期和时间转换为特定格式。EXTRACT:从时间值中提取特定部分,如年份、月份或小时。

AWR 报告是显示数据库性能和活动快照的报告,解读步骤包括:识别活动快照的日期和时间。查看活动、资源消耗的概览。分析会话活动,找出会话类型、资源消耗和等待事件。查找潜在性能瓶颈,如缓慢的 SQL 语句、资源争用和 I/O 问题。查看等待事件,识别并解决它们以提高性能。分析闩锁和内存使用模式,以识别导致性能问题的内存问题。
