繁体   English   中英

如何将表中的多行合并为单行

[英]How can i Merge multiple rows into single row in a table

我有一个类似的数据库

在此处输入图片说明

我需要将此表转换为这种格式

在此处输入图片说明

您可以按如下方式使用枢轴:

Select * from your_table
Pivot (max(marks) as marks 
       For subject in ('maths', 'physics', 'chemistry'))

您可以将查询与PIVOT操作结合使用

询问

WITH
    marks_data (id, subject, marks)
    AS
        (SELECT 1, 'maths', 100 FROM DUAL
         UNION ALL
         SELECT 1, 'physics', 95 FROM DUAL
         UNION ALL
         SELECT 1, 'chemistry', 99 FROM DUAL
         UNION ALL
         SELECT 2, 'maths', 90 FROM DUAL
         UNION ALL
         SELECT 2, 'physics', 89 FROM DUAL
         UNION ALL
         SELECT 2, 'chemistry', 96 FROM DUAL)
SELECT *
  FROM (SELECT * FROM marks_data)
       PIVOT (MAX (subject) AS subject, MAX (marks) AS marks
             FOR subject
             IN ('maths' AS maths, 'physics' AS physics, 'chemistry' AS chemistry));

结果

   ID    MATHS_SUBJECT    MATHS_MARKS    PHYSICS_SUBJECT    PHYSICS_MARKS    CHEMISTRY_SUBJECT    CHEMISTRY_MARKS
_____ ________________ ______________ __________________ ________________ ____________________ __________________
    1 maths                       100 physics                          95 chemistry                            99
    2 maths                        90 physics                          89 chemistry                            96

您可以使用条件聚合:

select id,
       max(case when subject = 'maths' then marks end) as maths_marks,
       max(case when subject = 'physics' then marks end) as physics_marks,
       max(case when subject = 'chemistry' then marks end) as chemistry_marks
from t
group by id;

您正在对齐每个主题中的值,所以我不明白您为什么需要主题名称。 但是您也可以轻松地将其包含在内:

select id,
       'maths' as subject_1,
        max(case when subject = 'maths' then marks end) as marks_1,
       'physics' as subject_2,
        max(case when subject = 'physics' then marks end) as marks_2,
       'chemistry' as subject_3,
        max(case when subject = 'chemistry' then marks end) as marks_3
from t
group by id;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM