最近在面试的时候碰到这样一个问题有三个表 分别为 学生表(student) 课程表(course) 分数表(score)
学生表
学生Id | 学生姓名 |
1 | 张三 |
2 | 李四 |
课程表
课程ID | 课程名 |
1 | 语文 |
2 | 数学 |
分数表
分数 | 课程ID | 学生ID |
98 | 1 | 1 |
95 | 2 | 1 |
80 | 1 | 2 |
85 | 2 | 2 |
姓名 | 语文成绩 | 数学成绩 |
张三 | 98 | 95 |
李四 | 80 | 85 |
运用子查询
select student.stuent_id ,(select score from score where score.stuent_id = s1.student_id and score.course.course_id = 1),,(select score from score where score.stuent_id = s1.student_id and score.course.course_id = 2) From student s1
行转列
select s1.name min(decode(score.course_id ,1,score)),min(decode(score.course_id ,2,score)) FROM STUENT ,SCORE WHERE STUDENT.STUDENT_ID = SCORE.STUDENT_ID GROUP BY NAME
至于列转行的方法就是用