首页 > 解决方案 > SQL 删除具有不同值的重复行,但将它们保留并显示在单行中

问题描述

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

在此处输入图像描述

非常感谢。

PS。我从您最初的回复中注意到,这不是一件容易的事。那么我可以让表格只显示超过一个年级的学生,因为我对只有一个年级的学生不感兴趣吗?像这样: 在此处输入图像描述

标签: sqlpostgresqlpivot

解决方案


您可以进行条件聚合:

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;

推荐阅读