2012-01-10 110 views
0

我有两个表的学生和其他的标记 学生包含类似的名字,姓氏和独特的IDNumber所有学生信息 和标记包含标记为每个学生痕学生 获得存储每年即从三年级学生为将在标记表3项嵌套的SELECT语句子查询返回多行

现在我想设计一个包含学生信息,并在单个记录所有3年标记

输出应该是这样的查询:

First Name | Last Name | 1st Year Marks | 2nd Year Marks | 3rd Year Marks

+1

如果您发布SQL语句,它也会更容易帮助。 – Aaron 2012-01-10 15:52:26

+1

或者至少是表格全定义 – jclozano 2012-01-10 15:56:45

回答

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 

我在这里做有条件的款项,以及动态年代以来,学生可以到达不同的时间。如果你有一个像“新生”,“大二”等的年表,那么这会更容易,然后跟踪学生什么时候完成了这一年,但这将工作,我想。

0

试试下面的查询..我考虑学生和标记有sstudent ID列

选择stu.firstname + '|' + stu.lastname +'|' + marks.1styr +'|' + marks.2nd yr +'|'+ marks.3rdyr from students as stu,marks where stu.uniqueid = marks.uniqueid