SQL删除具有不同值的重复行,但保留并以单行显示它们

时间:2018-06-12 13:23:43

标签: sql postgresql pivot

有8000行,包括学生姓名,课程和成绩。总共有4门课程,所以每个学生最多有4行。所以我想创建一个包含不同学生姓名的表格,并在同一行显示不同的成绩如下:

enter image description here

非常感谢。

PS。我从你最初的回答中注意到这不是一件容易的事。那么我可以在桌子上只显示有一个以上年级的学生,因为我对只有一个年级的学生不感兴趣吗?像这样: enter image description here

2 个答案:

答案 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)

希望这会有所帮助..