现在的位置: 首页 > 综合 > 正文

Oracle 倒置矩阵 与 大小写问题

2018年01月28日 ⁄ 综合 ⁄ 共 1759字 ⁄ 字号 评论关闭

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!汗。。。。。

 

 

 

 

 

抱歉!评论已关闭.