我有一个按科目排列的学生分数的数据。我希望将其转换为每位学生的专栏文章。
我经历了堆栈溢出问题,看到了很少的解决方案并尝试了这些解决方案,但是这些解决方案都没有帮助,或者我没有正确执行这些解决方案。
输入:
UID SUBJECT MARKS
16001 Chemistry 45
16001 CS 52
16001 English 28
16002 Chemistry 25
16002 CS 25
16002 English 50
16011 Biology 25
16011 Chemistry 30
16011 English 40
16011 Physics 50
Expected Output
UID Maths Physics Chemistry Biology CS English
16001 - - 45 - 52 28
16002 - - 25 - 25 50
16011 - 50 30 25 - 40
Query Written
select uid,
(case when subject='Maths' then Marks else '-' end) Maths,
(case when subject='Physics' then Marks else '-' end) Physics,
(case when subject='Chemistry' then Marks else '-' end) Chemistry,
(case when subject='Biology' then Marks else '-' end) Biology,
(case when subject='CS' then Marks else '-' end) CS,
(case when subject='English' then Marks else '-' end) English
from subWiseMarks
group by uid;
Output I'm getting
UID Maths Physics Chemistry Biology CS English
16001 - - 45 - - -
16002 - - 25 - - -
16003 - - 42 - - -
16011 - - - 25 - -
这意味着我仅获得每个学生的第一个条目。这段代码有什么错误。任何帮助表示赞赏。谢谢。
答案 0 :(得分:0)
您可以在下面尝试-您必须在此处使用最大/最小聚合
select uid,
max(case when subject='Maths' then Marks else '-' end) Maths,
max(case when subject='Physics' then Marks else '-' end) Physics,
max(case when subject='Chemistry' then Marks else '-' end) Chemistry,
max(case when subject='Biology' then Marks else '-' end) Biology,
max(case when subject='CS' then Marks else '-' end) CS,
max(case when subject='English' then Marks else '-' end) English
from subWiseMarks
group by uid;
答案 1 :(得分:0)
通过将多个表连接到同一个表来保持简单。 MySql应该可以很好地对此进行优化。
即时编写,未经测试,但这应该可行。
data