【问题标题】:Converting row values to columns in result using CASE statement [duplicate]使用 CASE 语句将行值转换为结果中的列 [重复]
【发布时间】:2019-03-04 06:45:59
【问题描述】:

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

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

【问题讨论】:

    标签: sql oracle pivot


    【解决方案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;
    

    【讨论】:

    • 这适用于这种情况!谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2012-11-04
    • 2022-01-01
    • 2012-12-12
    • 2020-01-13
    • 1970-01-01
    • 2020-01-24
    相关资源
    最近更新 更多