Όλες αυτές οι λύσεις για row numbering βασίζουνται σε ένα πεδίο με μοναδικές τιμές πάνω στο οποίο γίνεται η ταξινόμηση από την οποία προκύπτει το κάθε row number. Στην περίπτωσή σου το πρόβλημα αλλάζει αφού θες το row numbering να βασίζεται σε πεδίο με μη-μοναδικές τιμές, οπότε υπάρχει ένα work-around:
SELECT [RANK] = COUNT(*),
gm1.[GameUserId],
gm1.[TotalPoints]
FROM GameUser gm1,
GameUser gm2
WHERE CAST(gm1.[TotalPoints] AS CHAR) + CAST(gm1.[GameUserId] AS CHAR) <= CAST(gm2.[TotalPoints] AS CHAR)
+ CAST(gm2.[GameUserId] AS CHAR)
GROUP BY gm1.[GameUserId],
gm1.[TotalPoints]
ORDER BY [RANK]
To κόλπο είναι ότι επειδή ο συνδυασμός TotalPoints και GameUserID (αν γίνουν concatenate ως strings) είναι μοναδικός ανά εγγραφή, μπορεί να γίνει σύγκριση. Δοκίμασέ το, στη Northwind είναι κάπως έτσι:
SELECT [RANK] = COUNT(*),
p1.ProductName,
p1.UnitPrice
FROM Products p1,
Products p2
WHERE cast(p1.UnitPrice AS CHAR) + p1.ProductName <= CAST(p2.UnitPrice AS CHAR)
+ p2.ProductName
GROUP BY p1.ProductName,
p1.UnitPrice
ORDER BY [RANK]
Στο δικό σου πίνακα ίσως χρειαστεί λίγο tweaking, δεν προλαβαίνω να βάλω data και να το δοκιμάσω.
Vir prudens non contra ventum mingit