比如有表的数据如下:  Student_Grade
          Name   Subject    Grade
          小明   语文       100
          小明   数学       98
          小明   英语       95
          小陈   语文       100
          小陈   数学       100
现在要一条SQL语句,将数据展示成以下形式,请问如何写
           小明   语文   100   数学 98  英语  95
           小陈   语文   100   数学 100 英语  0

解决方案 »

  1.   

    create table Student_Grade(
     Name   varchar(40),
     Subject    varchar(40),  
     Grade   varchar(40))
     
     
    insert into Student_Grade
    select '小明','语文','100' from dual--          
    union
    select '小明','数学','98' from dual
    union
    select '小明','英语','95' from dual
    union
    select '小陈 ','语文','100' from dual
    union
    select '小陈 ','数学','100' from dualselect name ,'语文',sum(decode(Subject,'语文',Grade,0)) as 语文成绩,
                 '数学',sum(decode(Subject,'数学',Grade,0)) as 数学成绩,
                 '英语',sum(decode(Subject,'英语',Grade,0)) as 英语成绩 
                 from  Student_Grade
    group by name
      

  2.   

    谢谢了,
       这个问题确实也是个经典问题,两次面试都被考中了,但是这个问题确实也有其特殊性
    就是它每门课程的成绩记录只有一条,如果同一门的成绩有多条,我试了一下,SUM(Decode(suject,'语文',Grade,0)) as 语文成绩得到是求和的值