Jeg tror, at dette vil give dig det ønskede resultat. Bemærk, at i håndterer sager korrekt, hvor den målrettede vinder er lige med en anden vinder. (Begge får samme stilling).
SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')
Rediger :
Jeg vil gerne "tilslutte" Ignacio Vazquez-Abrams ' svar, som på flere måder er bedre end ovenstående.
Det giver f.eks. mulighed for at angive alle (eller flere) vindere og deres nuværende position.
En anden fordel er, at det giver mulighed for at udtrykke en mere kompliceret tilstand for at angive, at en given spiller er foran en anden (se nedenfor). Læser incrediman 's kommentar om, at der ikke vil være "bånd", fik mig til at undersøge dette; forespørgslen kan ændres lidt som følger for at håndtere situationen, hvor spillere har samme antal point (sådanne spillere ville tidligere have fået den samme positionsværdi, nu er positionsværdien yderligere knyttet til deres relative startværdier).
SELECT w1.name, (
SELECT COUNT(*)
FROM winners AS w2
WHERE (w2.points > w1.points)
OR (W2.points = W1.points AND W2.Start < W1.Start) -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally' -- optional where clause