Oracle 倒置矩阵小插曲
首先是倒置矩阵问题:
(要求一条SQL将下面的矩阵倒置)
【附表:】
create table student_data (
id number primary key ,
name varchar2(32),
course varchar2(32),
score number(4,2)
);
insert into student_data values (1,'aaa','java',88);
insert into student_data values (2,'aaa','c#',98);
insert into student_data values (3,'bbb','java',77);
insert into student_data values (4,'bbb','c#',87);
转换前的数据:
id name course score
1 aaa java 88
2 aaa c# 98
3 bbb java 77
4 bbb c# 87
转换后的数据:
name java c#
aaa 88 98
bbb 77 87
SQL语句如下:
select t.name ,sum(t.Java) Java ,sum(t.c#1) C#
from ( select name , case
when course = 'java' then score else 0 end "Java"
, case
when course = 'c#' then score else 0 end "c#1"
from student_data
) t
group by (t.name);
运行中间的
select name , case
when course = 'java' then score else 0 end "Java"
, case
when course = 'c#' then score else 0 end "c#1"
from student_data;
没有错误。但运行全部就出现错误!
检查N遍后,未果。
问过某位高人后,才发现:
-_- Oracle里所有的字段都是大写,所以以后写SQL语句应该注重大小写!晕死。。。。
改过后:
select t.name ,sum(t.JAVA) Java ,sum(t.C#1) C#
from ( select name , case
when course = 'java' then score else 0 end "JAVA"
, case
when course = 'c#' then score else 0 end "C#1"
from student_data
) t
group by (t.name);
运行,OK!汗。。。。。