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

来源:互联网 发布:乾隆 盖章 知乎 编辑:程序博客网 时间:2024/06/06 01:39

编写一条sql语句将表1(stuScore)中的纵向排列数据改写成表2

表1(stuScore):
idstuNamecourseNamescore1大李语文99.52大李数学79.53大李英语49.54小李语文89.55小李数学69.56小李英语59.5

表2:
idstuNamechineseScoremathScoreenglishScore1大李99.579.549.52小王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 englishScorefrom 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;