2010-05-22 4 views
1

J'ai une table comme ceci:rang Trouver de l'étudiant -sql Compact

Nom Mar1 Mar2 Mar3 total

xxx 80 80 80 240

yyy 60 70 50 180

aaa 85 65 75 225

Je voulais trouver le rang de l'étudiant en fonction du total. J'utilise SQL Compact 3.5. Comme nous avons la fonction rank() dans le serveur sql avons-nous quelque chose avec lequel nous pouvons trouver le rang des étudiants ??? Quand je "sélectionnez Total, rang() plus (commande par desc totale) i1 de stmarks" il est donner erreur

" Erreur majeure 0x80040E14, erreur mineure 25501

sélectionnez Total, rang () sur (commande par desc totale) i1 de stmarks Il y a eu une erreur d'analyse de la requête. [numéro de ligne jeton = 1, ligne jeton décalage = 21, jeton erreur = over] "

Do Sql Support compact rank() sur ou est il y a une autre façon ???

Répondre

1

Selon le résultat de la recherche, il semble que over() ne fonctionne pas avec sql-compact. J'ai donc essayé le concept d'auto-jointure comme dans here. Juste j'ai modifié la requête afin qu'elle fonctionne correctement avec les valeurs dupliquées. Enlevez le signe égal à. La requête modifiée est:

SELECT a1.Name, a1.Total, COUNT(a2.Total) Rank 
    FROM StMarks a1, StMarks a2 
WHERE a1.Total < a2.Total or (a1.Total=a2.Total and a1.Name = a2.Name) 
GROUP BY a1.Name, a1.Total 
ORDER BY a1.Total DESC, a1.Name DESC; 

Cela fonctionne très bien maintenant.