Zmień:
RANK() OVER (PARTITION BY ContenderNum ORDER BY totals ASC) AS xRank
do:
RANK() OVER (ORDER BY totals DESC) AS xRank
Spójrz na ten przykład:
DEMO SQL Fiddle
Możesz również przyjrzeć się różnicy między RANK (Transact-SQL) a DENSE_RANK (Transact-SQL):
RANKING (Transact-SQL)
Jeśli dwa lub więcej rzędów remisuje pod względem rangi, każdy z remisujących rzędów otrzymuje tę samą rangę. Na przykład, jeśli dwaj najlepsi sprzedawcy mają tę samą wartość SalesYTD, obaj zajmują pierwsze miejsce. Sprzedawca z kolejnym najwyższym wynikiemSprzedażYTD zajmuje trzecie miejsce, ponieważ są dwa wiersze, które mają wyższą pozycję. Dlatego funkcja RANK nie zawsze zwraca kolejne liczby całkowite.
DENSE_RANK (Transact-SQL)
Zwraca rangę wierszy w ramach partycji zestawu wyników, bez żadnych przerw w rankingu. Pozycja rzędu to jeden plus liczba odrębnych pozycji poprzedzających dany rząd.