我有两个学生表,另一个是商标 学生包含所有学生信息,如名字,姓氏和唯一身份号码 和标记包含学生获得的标记 对于每个学生,每年都会存储商标,即第三年的学生将在商标表中有3个条目
现在我想设计一个查询,其中包含学生信息和单个记录中的所有三年标记
输出应该是这样的:
First Name | Last Name | 1st Year Marks | 2nd Year Marks | 3rd Year Marks
答案 0 :(得分:0)
我不知道你的嵌套语句是什么样的,但你想要的是:
select
s.firstname,
s.lastname,
sum(case when m.year = m2.minyear then m.mark else 0 end) as `1st Year Marks`,
sum(case when m.year = m2.minyear+1 then m.mark else 0 end) as `2nd Year Marks`,
sum(case when m.year = m2.minyear+2 then m.mark else 0 end) as `3rd Year Marks`
from
students s
inner join marks m on
s.student_id = m.student_id
inner join (select student_id, min(year) as minyear from marks group by student_id) m2 on
s.student_id = m2.student_id
group by
s.firstname,
s.lastname
我在这里做了有条件的总和,以及充满活力的岁月,因为学生可以在不同的时间到达。如果你有一个像“新生”,“大二学生”等年份表,然后跟踪学生何时完成那一年,这会更容易,但我认为这将有效。
答案 1 :(得分:0)
尝试下面的查询..我正在考虑学生和标记在列
中有sstudent id选择stu.firstname +'|' + stu.lastname +'|' + marks.1styr +'|' + marks.2nd yr +'|'+ marks.3rdyr来自学生作为stu,标记stu.uniqueid = marks.uniqueid