有时候数据库存储的是一行行的数据,而显示的时候我们需要把他转化为一列数据,
比较常见的场景是,学生的考试成绩,员工的工资明细
这些都会存在一个表中,有很多行数据,但是最终展示的时候我们需要合并为一行数据
下面以学生成绩为例
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
试题一 : 通过查询指令输出以下数据
姓名 语文 数学 物理 平均分 总分
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
-----------------------------------------------------------------------------------------------------------------
创建表:
create table test(
username varchar(12),
kemu varchar(12),
fenshu number(4)
);
向表中制造数据:
select a.*,rowid from test a ;
使用case when 语句对每门课进行分类,用人员来分组得到这个人的所有门科,同时可以求出总分和平均分
select username,
max(case kemu when '语文' then fenshu else 0 end) 语文,
max(case kemu when '数学' then fenshu else 0 end) 数学,
max(case kemu when '英语' then fenshu else 0 end) 英语,
sum(fenshu) 总分,
cast(avg(fenshu*1.0) as decimal(18,2))平均分
from test
group by username ;