考虑下表,
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之下,而Science总是在SUbject_2之下。
GROUP BY
使用:
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列,name, subject, marks。
name, subject, marks
如果您想在同一张表中有 单独的列 ,那么对于每个学生,您都应该将它们作为 一行 。并且,当您为学生准备了新的科目时,请为该学生 更新 行,而不是添加新行。