有8000行,包括学生姓名,课程和成绩。总共有4门课程,所以每个学生最多有4行。所以我想创建一个包含不同学生姓名的表格,并在同一行显示不同的成绩如下:
非常感谢。
PS。我从你最初的回答中注意到这不是一件容易的事。那么我可以在桌子上只显示有一个以上年级的学生,因为我对只有一个年级的学生不感兴趣吗?像这样:
答案 0 :(得分:3)
您可以执行条件聚合:
select name,
max(case when seq = 1 then Course end) as Course1,
max(case when seq = 1 then Grade end) as Course1Grade,
max(case when seq = 2 then Course end) as Course2,
max(case when seq = 2 then Grade end) as Course2Grade,
. . .
from (select *, row_number() over (partition by name order by course) as seq
from table
) t
group by name;
答案 1 :(得分:1)
这肯定只需要在另一个课程中添加另一个连接
SELECT n.name, N.course, N.grade, E.course, E.grade, I.course, I.grade
FROM (
SELECT DISTICT name
FROM STUDENT
) N
LEFT JOIN (
SELECT name, course, grade
WHERE course = MATH
) M
ON (N.name = M.name)
LEFT JOIN (
SELECT name, course, grade
WHERE course = ENGLISH
) E
ON (N.name = E.name)
LEFT JOIN (
SELECT name, course, grade
WHERE course = IT
) I
ON (N.name = I.name)
希望这会有所帮助..