我有一个数据库表,其中包含多个记录,如下所示。
我正在尝试使用CASE WHEN语句将行数据转换为列结果,以提供一些重要信息。
学生
-------------------------
|ID|Name |Subject|Mark|
|01|Ishara |Maths |40 |
|01|Ishara |Science|60 |
|02|Tharaka|Maths |60 |
|03|Rukshan|Science|20 |
|04|Duminda|Science|60 |
------------------------
我需要获得如下结果集,
-------------------------------------
ID|Name |Maths Mark| Science Mark|
01|Ishara |40 |60 |
02|Tharaka |60 |Null |
03|Rukshan |Null |20 |
04|Duminda |Null |60 |
-------------------------------------
了解是否有人可以通过使用简单的SQL查询来帮助完成此任务。
答案 0 :(得分:1)
您可以借助case表达式进行条件聚合:
select id, name,
max(case when subject = 'Maths' then mark end) as Maths_mark,
max(case when subject = 'Science' then mark end) as Science_mark,
. . .
from student s
group by id, name;