J'utilise SQL Server 2008. J'ai une table Étudiant dans lequel il y a des champs suivants: 1. StudentId, 2. StudentName, 3. Marques. Je veux obtenir un ensemble de résultats dans lequel il devrait y avoir une colonne nommée "Position". Quelque chose comme "Select StudentId, StudentName, marques, comme position de l'étudiant ..." de sorte que, selon les notes d'un étudiant a marqué, je peux les évaluer comme la 1ère, 2e ou 20e position. Si les élèves ont les mêmes notes, ils ont la même position. Merci. RhysSQL Server: position basée sur les marques
Répondre
Utilisation RANK:
Si deux ou plusieurs lignes à égalité pour un rang, chaque lignes liées reçoit le même rang. Par exemple, si les deux meilleurs vendeurs ont la même valeur SalesYTD, ils sont tous deux classés au premier rang. Le vendeur avec le SalesYTD suivant le plus élevé est classé numéro trois, car il y a deux lignes qui sont classées plus haut. Par conséquent, la fonction RANK ne renvoie pas toujours des entiers consécutifs.
La requête pourrait ressembler à ceci:
SELECT
StudentId,
StudentName,
Marks,
RANK() OVER (ORDER BY Marks DESC) AS Position
FROM Student
Vous pouvez utiliser une sous-requête pour calculer la position. La position est tout simplement un de plus que le nombre d'étudiants avec une note supérieure:
select
s.StudentId, s.StudentName, s.Marks,
Position = 1 + (select count(*) from Students m where m.Marks > s.Marks)
from
Students s
Merci pour la réponse rapide simple. Cela l'a fait pour moi. J'ai aussi réalisé que la fonction DENSE_RANK() proposée par Mark Byers ci-dessus fait aussi l'affaire. :-) – Rhys
- 1. SQL Server Date Vérification basée sur l'entrée
- 2. Autorisation utilisateur MS Sql Server basée sur une table
- 3. Sql Server CE Commande TableDirect basée sur la clé primaire
- 4. requête basée sur sql
- 5. Requête SQL basée sur les critères
- 6. Que signifient les marques "at" (@) dans cette requête SQL?
- 7. SQL Server ROW_NUMBER() sur SQL Server 2000?
- 8. JQuery UI sortable: position de restauration basée sur une condition
- 9. Opérations sur les fichiers SQL Server?
- 10. Aide sur les requêtes SQL Server 2005
- 11. sélectionnez maximum deux marques sur trois
- 12. requête SQL basée sur certains critères
- 13. requête SQL basée sur certains critères
- 14. Questions sur SQL Server
- 15. EAV sur SQL Server
- 16. Table de correspondance basée sur les fichiers
- 17. Sélectionnez SQL Server sur colonne différente
- 18. Reconnaissance optique des marques (OMR) sur l'iPhone
- 19. Authentification basée sur les formulaires
- 20. Conception basée sur les règles
- 21. autorisation basée sur les rôles
- 22. Procédures stockées SQL Server - colonne de mise à jour basée sur le nom de la variable ..?
- 23. Similarité entre les chaînes - SQL Server 2005
- 24. Sauvegarde basée sur l'image
- 25. Aucune icône et les marques ne s'affichent
- 26. vue basée vs application iphone basée sur les fenêtres
- 27. SSRS 2005 Sécurité basée sur les paramètres
- 28. SQL Server - Réécriture déclencheur pour éviter approche basée sur le curseur
- 29. Comment: optimisation des performances basée sur l'utilisation dans SQL Server 2008 Express
- 30. Obtenez dernière valeur basée sur un identifiant dans SQL Server 2005
Voici la documentation MSDN pour les fonctions de classement: http://msdn.microsoft.com/en-us/library/ms189798.aspx – David
+1 parfait, je pensais ROW_NUMBER(), mais RANK() gère parfaitement les marques dupliquées –