2013-09-29 49 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