sql - 使用 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 查询来帮助完成此任务。
解决方案
您可以借助案例表达式进行条件聚合:
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;
推荐阅读
- java - 从服务器检索信息时出现应用内购买错误 [DF-AA-20] - android
- windows - 如何在 Windows 上从 USB 设备 VID 和 PID 获取供应商名称和产品名称?
- html - 其他元素堆叠在一起,我已经将它们的容器设置为 position:relative;
- c++ - std::async 监控线程年龄
- node.js - 反应客户端尝试获取数据时如何解决express.js中的CORS请求未成功?
- azure - ARM - 将现有的应用程序洞察资源映射到应用服务
- html - 对无序列表的质疑
- swift - Swft:制作一个球并将其垂直放置在屏幕底部。然后当你快速按下球时垂直移动球
- c# - C#同时监听两个tcp端口
- javascript - 处理包装类的回调