目录
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