一个表名为cjb(成绩表):
姓名   科目    成绩
张三   语文    20
张三   数学    30
张三   英语    50
李四   语文    70
李四   数学    60
李四   英语    90通过写sql语句把它变成:
姓名   语文   数学    英语
张三   20     30      50
李四   70     60      90

解决方案 »

  1.   

    select 姓名,decode(科目,'语文',成绩) 语文,decode(科目,'数学',成绩) 数学,decode(科目,'英语',成绩) 英语 from cjb;
      

  2.   


    select 姓名,sum(decode(科目,'语文',成绩)) 语文,sum(decode(科目,'数学',成绩)) 数学,sum(decode(科目,'英语',成绩)) 英语 from cjb group by 姓名;
      

  3.   

    SQL> select * from cjb;NAME       SUBJECT         SCORE
    ---------- ---------- ----------
    jim        math               90
    jim        eng                70
    tom        eng                75
    tom        chs                95
    tom        math               75
    jim        chs                756 rows selected.SQL> select name,
      2  sum(decode(subject,'chs',score)) chs,
      3  sum(decode(subject,'math',score)) math,
      4  sum(decode(subject,'eng',score)) eng
      5  from cjb
      6  group by name;NAME              CHS       MATH        ENG
    ---------- ---------- ---------- ----------
    tom                95         75         75
    jim                75         90         70
    --这里只是把你的汉字语文,英语,数学换为了chs,eng,math而已 需要的话你再修改一下就可以了
      

  4.   

    学习.....只知道在SQL中转,在ORACLE中要用到decode 学习
      

  5.   

    这里decode函数前面的sum汇总是什么意思?很难理解
      

  6.   

    select 姓名,max(decode(科目,'语文',成绩,0)) 语文,max(decode(科目,'数学',成绩,0)) 数学,max(decode(科目,'英语',成绩,0)) 英语 from cjb group by 姓名;