How to select top 2 passed math courses for each student?
A Grade table like below:
Rec | SSN | TermCode | Course | Grade | CrErn | Count2Degree |
1 | 111-11-1111 | 200507QF | MS101 | A | 4 | |
2 | 111-11-1111 | 200510QF | CD125 | B | 3 | |
3 | 111-11-1111 | 200510QF | MS102 | F | 0 | |
4 | 111-11-1111 | 200601QF | MS102 | B | 4 | |
5 | 111-11-1111 | 200604QF | MS103 | C | 4 | |
6 | 222-22-2222 | 200601QF | CD136 | B | 3 | |
7 | 222-22-2222 | 200601QF | MS106 | B | 4 | |
8 | 222-22-2222 | 200604QF | MS135 | C | 4 | |
9 | 222-22-2222 | 200607QF | MS103 | F | 0 | |
10 | 222-22-2222 | 200607QF | MS105 | B | 4 | |
11 | 333-33-3333 | 200907QF | GE102 | A | 4 |
MSXXX is math courses, to select top 2 passed math course SQL below:
SELECT * FROM Grade AS Q WHERE Q.Course Like 'MS*' AND Q.CrErn>0 AND Q.SSN & Q.TermCode & Q.Course & Q.Grade In (Select top 2 SSN & TermCode & Course & Grade from Grade Where Course like 'MS*' and CrErn>0 and Q.SSN=Grade.SSN order by SSN, TermCode, Course, Grade) Order by SSN, TermCode, Course, Grade
To update Count2Degree column run a SQL like below:
CurrentDb.Execute "Update Grade set Count2Degree='Y' where Rec in (SELECT Rec FROM Grade AS Q WHERE Q.Course Like 'MS*' AND Q.CrErn>0 AND Q.SSN & Q.TermCode & Q.Course & Q.Grade In (Select top 2 SSN & TermCode & Course & Grade from Grade where Course like 'MS*' and CrErn>0 and Q.SSN=Grade.SSN order by SSN, TermCode, Course, Grade))"
--- OR Grade_Code ---