sql - oracle中如何合并一组记录?

标签 sql oracle group-by

考虑下表,

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下。

最佳答案

用途:

  • 最大
  • 分组依据
SQL> SELECT NAME,
  2    MAX(subject_1) subject_1,
  3    MAX(marks_1) marks_1,
  4    MAX(subject_2) subject_2,
  5    MAX(marks_2) marks_2
  6  FROM t
  7  GROUP BY name;

NAME SUBJECT_1    MARKS_1 SUBJECT_2    MARKS_2
---- --------- ---------- --------- ----------
Jon  Maths             60 Science           70
Tom  Maths             90 Science           50

SQL>

顺便说一句,您需要考虑您的表格设计。您只能有 3 列:名称、主题、标记

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

关于sql - oracle中如何合并一组记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35174477/

相关文章:

mysql - 查找每个组件的最新记录 MySQL

python - 根据条件创建列

mysql - 使用 Wordpress wp_postmeta 表中的数据创建新表

MySQL ORDER BY 随机字段不适用于附加操作

sql - 使用excel连接远程sql数据库

oracle - 如何配置我的 Oracle tnsnames 文件位置?

mysql - 按日期分组,即使没有日期条目

sql - 一对多关系不存在的地方

mysql - 将普通查询转换为子查询会得到不同的结果

c++ - 使用 C++ 连接到 oracle 数据库