【发布时间】:2016-10-24 22:05:38
【问题描述】:
tbl_marks:
+-------+-----------+-----------+-----------+-----------+----------+
|examid | section1 | section2 | section3 | section4 | year |
+-------+-----------+-----------+-----------+-----------+----------+
|E1 | 100 | 101 | 102 | 103 | 2016 |
|E2 | 200 | 201 | 202 | 203 | 2015 |
|E3 | 300 | 301 | 302 | 303 | 2014 |
|E4 | | | | | 2013 |
|E5 | 400 | 401 | 402 | 403 | 2016 |
|E6 | 500 | 501 | 502 | 503 | 2015 |
|E7 | 600 | 601 | 602 | 603 | 2014 |
|E8 | | 701 | | 703 | 2013 |
+-------+-----------+-----------+-----------+-----------+----------+
tbl_student:
+-------+-----+---------+
|name | sid | rollnum |
+-------+-----+---------+
|cheery | 1 | X1 |
|apple | 2 | X2 |
+-------+-----+---------+
tbl_exam:
+--------+------+
|examnum | sid |
+--------+------+
| E1 | 1 |
| E2 | 1 |
| E3 | 1 |
| E4 | 1 |
| E5 | 2 |
| E6 | 2 |
| E7 | 2 |
| E8 | 2 |
+--------+------+
预期输出:
Section1、2、3、4 代表考试的第 1、2、3、4 部分的分数。 请注意,如果某个部分的分数为空,则应将其替换为零(000)。
最终输出表有列 - 分数,它是特定年份所有部分的分数的串联结果。 score1 表示 2016 年所有部分分数的串联结果。类似 score2 - 2015、score3 - 2014 等。
输出应该有两个人的 2 行 5 列 - 卷数,2016 年、2015 年、2014 年和 2013 年的连接部分分数。
+------+------------+-------------+-------------+-------------+
| num | score1 | score2 | score3 | score4 |
+------+------------+-------------+-------------+-------------+
| X1 |100101102103| 200201202203| 300301302303| 000000000000|
| X2 |400401402403| 500501502503| 600601602603| 000702000703|
+------+------------+-------------+-------------+-------------+
感谢任何建议。谢谢。
【问题讨论】:
-
@Jens 感谢您帮助格式化表格。欣赏它。我试图遵循格式规则。我无法知道我在哪里做错了。
-
将它们封装在代码块中。
-
对不起,我不明白 section1、section2 等是什么...
-
@Jens 成功了。谢谢
-
我认为一种方法是创建一个新的临时表复制 tbl_marks 表并向其添加一个额外的列,即 tbl_student 表的 sid。现在我们可以在按 sid 分组的部分分数(部分 1、部分 2 等)上使用 GROUP_CONCAT 和 concat。有什么想法,如果这是一个好方法,或者我们可以在不创建新表的情况下获得结果吗?