使用CASE语句将行值转换为结果列

时间:2018-09-28 09:38:16

标签: sql oracle pivot

我有一个数据库表,其中包含多个记录,如下所示。

我正在尝试使用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查询来帮助完成此任务。

1 个答案:

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