OVER()
klausul er nødvendig, så SQL Server ved præcis, hvordan du vil bestemme ting som RANK()
. Hvad RANK()
forventer du, hvis du ikke leverer SQL Server med et bestillingskriterie? Er vinderen af et løb den med hurtigste tid, langsomste tid eller fornavn alfabetisk?
Du behøver ikke at fjerne ORDER BY
klausul, når du tilføjer en ORDER BY
klausul inde i OVER()
. Disse bruges uafhængigt - en til at bestemme RANK()
og den anden til at diktere rækkefølgen.
Så hvis du for eksempel ville returnere deltagerne i et løb, men bestille dem sidstepladsen til førstepladsen, kan du sige:
SELECT
name,
finish_time,
[rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM
dbo.race_table
ORDER BY
finish_time DESC; -- fastest last