【问题标题】:How to merge a Group of records in oracle?oracle如何合并一组记录?
【发布时间】:2016-05-12 11:57:21
【问题描述】:

考虑下表,

Name    | Subject_1    | Marks_1    | Subject_2    | Marks_2    |
Tom     | Maths        | 90         |              |            |
Tom     |              |            | Science      | 50         | 
Jon     |              |            | Science      | 70         |
Jon     | Maths        | 60         |              |            |

我如何得到以下结果

Name    | Subject_1    | Marks_1    | Subject_2    | Marks_2    |
Tom     | Maths        | 90         | Science      | 50         |
Jon     | Maths        | 60         | Science      | 70         | 

尝试了GROUP BY 的形式,但没有得到正确的结果,数学将始终归入 Subject_1,科学归入 SUbject_2。

【问题讨论】:

  • 如果 Tom 有两节数学课会发生什么。如果乔恩也有历史?
  • 每人在表格中只能获得一个主题的单个条目,并且假设只有两个主题
  • 如果找到新的类(历史)?
  • 然后我们将有一个 Subject_3
  • 我不明白您为什么要为主题设置单独的列。为什么不能简单地拥有SubjectMarks 列?

标签: sql oracle group-by


【解决方案1】:

用途:

  • 最大
  • 分组方式
SQL> 选择名称, 2 MAX(主题_1)主题_1, 3 MAX(marks_1) 个marks_1, 4 MAX(主题_2)主题_2, 5 MAX(marks_2) 个marks_2 6 从吨 7 按名称分组; 名称 SUBJECT_1 MARKS_1 SUBJECT_2 MARKS_2 ---- --------- ---------- --------- ---------- 乔恩 数学 60 科学 70 汤姆数学 90 科学 50 SQL>

另一方面,您需要考虑您的表格设计。您只能有 3 列,name, subject, marks

如果您想在同一张表中拥有单独的列,那么您应该将它们作为每个学生的单行。当您有学生的新科目时,请更新该学生的行,而不是添加新行。

【讨论】:

  • @jarlh 不,这是一个复制/粘贴错字。删除它。
【解决方案2】:

试试这个:

select maths.name,maths.subject_1,maths.marks_1,sci.subject_1,sci.marks_2 
from mytable maths,(select * from mytable where subject_2 is not null) sci 
where maths.name=sci.name
and maths.subject_1 is not null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2021-04-14
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多