例如:课程表courseid kecheng1 英语2 化学3 数学4 语文考试成绩表gradeid xuehao kecheng_id chengji1 110 1 662 110 2 883 110 3 984 110 4 995 111 ................................................................学生表studentid xuehao student_name1 110 张三2 111..............我要实现成如下:student_name xuehao 英语 化学 数学 语文张三 110 66 88 98 99....................................................................................
t.xuehao,
max(decode(t.kecheng,'英语',t.chengji)) '英语',
max(decode(t.kecheng,'化学',t.chengji)) '化学',
max(decode(t.kecheng,'数学',t.chengji)) '数学',
max(decode(t.kecheng,'语文',t.chengji)) '语文'
from
(select s.student_name,s.xuehao,c.kecheng,g.chengji
from student s
left join grade g on s.xuehao=g.xuehao
left join course c on s.kecheng_id=c.id) t
group by student_name,xuehao差不多就这样了
[A]1、固定列数的行列转换
如
student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
……
转换为
语文 数学 英语
student1 80 70 60
student2 90 80 100
……
语句如下:
select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by student