You should be able to use Row_number. Since you haven't posted any table definitions, this is rough and untested.
SELECT name, mark, Row_number() Over (Order By Mark DESC) as Rank
FROM StudentMarks
Order By Name
If you want identical marks to get identical ranks, instead of row_number use RANK or DENSE_RANK. Same kinda thing applies.
Gail Shaw
Microsoft Certified Master: SQL Server, MVP, M.Sc (Comp Sci)
SQL In The Wild: Discussions on DB performance with occasional diversions into recoverability
We walk in the dark places no others will enter
We stand on the bridge and no one may pass