日期:2014-05-17  浏览次数:20642 次

行转列问题,求高手!
我有这样一个表,表字段如下:
grade_id(年级)  class_id(班级)  stu_name(姓名)  course(科目)  score(成绩)

现不知有多少个科目(不定),可能一个学生有4个,可能另一个学生有6个,
怎样转成:
grade_id(年级)class_id(班级)stu_name(姓名)course1(科目1)score1(成绩1)course2(科目2)score2(成绩2)...
的形式


------解决方案--------------------
每个学生有多少科目不知道没有关系,总共有多少科目是一定要知道的,否则没法做。
比如有语文,数学,英语三门。

select grade_id,class_id,stu_name,
  max(decode(course, '语文', score, 0)) as 语文成绩,
  max(decode(course, '数学', score, 0)) as 数学成绩,
  max(decode(course, '英语', score, 0)) as 英语成绩,
from your_table group by grade_id,class_id,stu_name order by 1,2,3;
------解决方案--------------------
每个学生有多少科目不知道没有关系,总共有多少科目是一定要知道的,否则没法做。
比如有语文,数学,英语三门。

select grade_id,class_id,stu_name,
  max(decode(course, '语文', score, 0)) as 语文成绩,
  max(decode(course, '数学', score, 0)) as 数学成绩,
  max(decode(course, '英语', score, 0)) as 英语成绩
from your_table group by grade_id,class_id,stu_name order by 1,2,3;

------解决方案--------------------
就是不知道科目
------解决方案--------------------
百度 oracle动态行转列吧  记得有很多帖子都问过
------解决方案--------------------
 这种 搜下就是  http://topic.csdn.net/u/20100109/13/6A10C168-F190-4766-B838-ADBF03C4AC7B.html
动态的无非就是要 拼接下sql。