我有一批ORACLE字段和数据如下:姓名  科目  成绩
张三  语文  90
张三  数学  85
张三  英语  80
李四  语文  95
李四  数学  80
李四  英语  70
我要实现的结果是:
姓名  科目1  成绩1  科目2  成绩2  科目3  成绩3
张三  语文   90     数学   85     英语   80
李四  语文   95     数学   80     英语   70请教一下高手,这样的做法用ORACLE如何实现?谢谢!

解决方案 »

  1.   

    http://topic.csdn.net/u/20080807/23/fa79bdef-e521-455a-acb9-589d9e969011.html
    是这个?
      

  2.   

    with t as (
      select '张三' name,'语文' subject, 90 socre from dual union all
      select '张三' name,'数学' subject, 85 socre from dual union all
      select '张三' name,'英语' subject, 80 socre from dual union all
      select '李四' name,'语文' subject, 95 socre from dual union all
      select '李四' name,'数学' subject, 80 socre from dual union all
      select '李四' name,'英语' subject, 70 socre from dual)
    SELECT NAME,
           MAX(decode(subject, '语文', subject)) 科目1,
           MAX(decode(subject, '语文', socre)) 成绩1,
           MAX(decode(subject, '数学', subject)) 科目2,
           MAX(decode(subject, '数学', socre)) 成绩2,
           MAX(decode(subject, '英语', subject)) 科目3,
           MAX(decode(subject, '英语', socre)) 成绩3
      FROM t
     GROUP BY NAME;
      

  3.   


    谢谢,你的结果出来是对的。
    不过我有一个地方不太明白,为什么你前面加MAX(decode(subject, '英语', socre)) 成绩3
    是MAX(),  我看有些地方用的是SUM()。我也尝试了下,用SUM会报错。
      

  4.   

    非group by的字段要用聚合函数,sum的列必须是数字