首页 > 数据库 >oracle的decode函数实现行转列

oracle的decode函数实现行转列

时间:2023-04-14 15:44:24浏览次数:40  
标签:sys name item grade 转列 decode stu oracle id

目录

oracle的decode函数实现行转列

1、decode函数语法

decode(字段,所匹配的值,列所显示的值)

2、示例

2.1、数据库数据

有一个学生表 :sys_stu,

字段有 学生id:stu_id,学生名称:stu_name ,学生科目:stu_item,学生成绩 stu_grade

数据库数据如下:

stu_id stu_name stu_item stu_grade
1 张三 英语 80
2 张三 语文 90
3 张三 数学 85
4 李四 英语 70
5 李四 语文 85
6 李四 数学 95
7 小红 英文 90
8 小红 语文 80
9 小红 数学 85

创表语句如下:

drop table sys_stu;
create table sys_stu(
    stu_id number(11),
    stu_name varchar2(100),
    stu_item varchar2(100),
    stu_grade number(16,2)
);

insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(1,'张三','英语',80);
insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(2,'张三','语文',90);
insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(3,'张三','数学',85);

insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(4,'李四','英语',70);
insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(5,'李四','语文',85);
insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(6,'李四','数学',95);

insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(7,'小红','英语',90);
insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(8,'小红','语文',80);
insert into sys_stu(stu_id,stu_name,stu_item,stu_grade) values(9,'小红','数学',85);
commit;

2.2、需求

实现打印每位同学的成绩单

学生名称 英语 语文 数学
张三 80 90 85
李四 70 85 95
小红 90 80 85

sql写法如下:

select 
	stu_name as 学生名称,
	sum(decode(stu_item,'英语',stu_grade)) as 英语,
	sum(decode(stu_item,'语文',stu_grade)) as 语文,
	sum(decode(stu_item,'数学',stu_grade)) as 数学
from sys_stu 
	group by stu_name;

标签:sys,name,item,grade,转列,decode,stu,oracle,id
From: https://www.cnblogs.com/lgxdev/p/17318512.html

相关文章

  • Q:oracle小于1的number,不显示小数点前的0?
    oracle存储number类型数字 如果数字小于1如0.35就会存储.35 省略掉前面的数字0方法1:oracle 数据库字段值为小于1的小数时,转换到char类型处理,会丢失小数点前面的0      例如0.35就变成了.35 2.解决办法:用to_char函数格式化数字显示      select    ......
  • Oracle 分析函数
    说明:由于oracle默认大写,所以在本文中会出现一下大写一下小写,在oracle都可以执行,如果oracle字段为小写字段,则需要用双引号查询。需求举例需求假如存在一个需求,查询每个用户所在部门的总工资,在每个员工后面增加一个总工资字段显示。例如部门一合计为15000,部门二合计为100......
  • mybatis 连接 ORACLE
     application-common-dev.ymlspring:profiles:include:[common]main:allow-bean-definition-overriding:true#Redis服务器IPredis:host:127.0.0.1#Redis服务器连接端口port:6379#Redis服务器连接密码password:testj......
  • Oracle - 'yyyy-mm-dd' & 'yyyymmdd'
     oracle中日期格式'yyyy-mm-dd'和'yyyymmdd'的区别 对于年月日中"日"是个位的情况下,处理不一样,'yyyymmdd'格式没问题,而式'yyyy-mm-dd'格式则不行,请看: SQL>altersessionsetnls_date_format='yyyy-mm-ddhh24:mi:ss'; Sessionaltered. SQL>......
  • Java_procedure with return value(oracle)
    Java调用Oracle中有返回值的存储过程1) 在编写存储过程时,输入参数用in(如果不写默认为in),输出参数用out --编写过程,要求输入雇员编号,返回雇员姓名。 createorreplaceproceduregetNameByNo(noinnumber,nameoutvarchar2)is begin  selectenameintonamefrom......
  • Maven_How To Add Oracle JDBC Driver In Your Maven Local Repository
    via: http://www.mkyong.com/maven/how-to-add-oracle-jdbc-driver-in-your-maven-local-repository/ DuetoOraclelicenserestriction,thereisNOpublicMavenrepositoryprovidesOracleJDBCdriver.TouseOraclejdbcdrivewithMaven,youhavetoinstallit......
  • Oracle_数组
     Oracle数组一般可以分为固定数组和可变数组集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。在PL/SQL中是没有数组(Array)概念的。但是如果程......
  • ORA-00942 Table or View Does Not Exist Oracle Error
    Cause:java.sql.SQLException:ORA-00942:tableorviewdoesnotexistThenItrytorunthesqlstatementthatthewebapptryingtoexecutebeforehittingthiserroranditreturnstheresultswithoutanyerror.Thevendorgivemethefeedbackthattheta......
  • oracle 字段大于某段时间
    精确到年月日时分秒,根据要求可精确到指定的日期时间:Oracle数据库时间字段>to_date(‘2020/10/19:38:51’,‘YYYY/MM/DDHH24:MI:SS’);......
  • ORACLE还原恢复启动时数据库报ORA-00704, ORA-00604, ORA-00904
    Oracle数据库还原恢复后,执行alterdatabaseopenresetlogs时遇到下面错误。如下所示:SQL> alter database open resetlogs;alter database open resetlogs*ERROR at line 1:ORA-00603: ORACLE server session terminated by fatal errorORA-01092: ORACLE ins......