您的位置:首页 > 数据库

将数据库中的纵向排列数据改写成横向排列数据

2017-08-22 19:09 411 查看
编写一条sql语句将表1(stuScore)中的纵向排列数据改写成表2

表1(stuScore):

idstuNamecourseNamescore
1大李语文99.5
2大李数学79.5
3大李英语49.5
4小李语文89.5
5小李数学69.5
6小李英语59.5
表2:

idstuNamechineseScoremathScoreenglishScore
1大李99.579.549.5
2小王89.569.559.5
stuScore建表语句:

--创建表格
create table stuScore(
id number(6),
stuName varchar2(50),
courseName varchar2(50),
score number(6,1),
primary key(id)
);
--插入数据
insert into stuScore (Id, Stuname, Coursename, Score)
values (1, '大李', '语文', 99.5);
insert into stuScore (Id, Stuname, Coursename, Score)
values (2, '大李', '数学', 79.5);
insert into stuScore (Id, Stuname, Coursename, Score)
values (3, '大李', '英语', 49.5);
insert into stuScore (Id, Stuname, Coursename, Score)
values (4, '小王', '语文', 89.5);
insert into stuScore (Id, Stuname, Coursename, Score)
values (5, '小王', '数学', 69.5);
insert into stuScore (Id, Stuname, Coursename, Score)
values (6, '小王', '英语', 59.5);
commit;

查询语句:

写法1:

select stuName,
sum(decode(courseName,'语文',score,null)) as chineseScore,
sum(decode(courseName,'数学',score,null)) as mathScore,
sum(decode(courseName,'英语',score,null)) as englishScore
from stuScore group by stuName;
写法2:

select stuName,
sum(case courseName when '语文' then score end) as chineseScore,
sum(case courseName when '数学' then score end) as mathScore,
sum(case courseName when '英语' then score end) as englishScore
from stuScore group by stuName;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 sql oracle