首页 > 解决方案 > 使用 CASE 语句将行值转换为结果中的列

问题描述

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

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

标签: sqloraclepivot

解决方案


您可以借助案例表达式进行条件聚合:

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;

推荐阅读