2013-09-29 52 views
0

我有一个表,它可以被看作是两个课程评价几个课堂测验,就像这样:SQL-获取最大值以及所有其他列?

student_ID  Evaluation   Course1 Course2 
------------------------------------------------------ 
1     5     88   93 
2     4     70   87 
1     5     93   90 
2     5     99   91 
3     3     65   60 
3     4     88   70 

我需要评估= 5的结果,为每一位学生,如果有的话。如果该学生有多个评估= 5,则该查询仅显示其中的任何一个。因此,对于上面的例子表,查询结果将是

student_ID  Evaluation   Course1 Course2 
------------------------------------------------------ 
1     5     88   93 
2     5     99   91 

当然在我真正的表中,“课程”人数超过2

感谢您的帮助。

回答

2

既然你只想每student_id只得到一个记录,你可以使用ROW_NUMBER(),它会产生序号。生成的编号始终始于1,您可以使用该编号为每个分区过滤出行,在此情况下为Student_ID

SELECT Student_ID, Evaluation, Course1, Course2 
FROM  
     (
      SELECT Student_ID, Evaluation, Course1, Course2, 
        ROW_NUMBER() OVER (PARTITION BY Student_ID 
        ORDER BY Student_ID) rn 
      FROM TableName 
      WHERE Evaluation = 5 
     ) a 
WHERE a.rn = 1 
+0

哦,我的上帝!你太快了。非常感谢。 – user1816353

相关问题