2009-07-24 10 views
1

RANK Ich habe Probleme beim Versuch, jeden unserer Studenten Rang, von dem sie in der Heimnetzgruppe sind.Brauchen Sie Hilfe versuchen, mit einer GROUP BY

Beispiel gefälschte Daten.

HomeGroup 
1. Team RED 
2. Team BLUE 
3. Team Skeet 
4. Team GREEN 

Students 
1. John, Score - 34, Team RED 
2. Jill, Score - 87.3, Team RED 
3. Fred, Score - 41, Team GREEN 
4. Jane, Score 93, Team BLUE 
... 

usw.

Meine Ausgabe ist in den folgenden

Scores 
StudentId 1, Score 34, Rank - 5th 
StudentId 2, Score 87.3, Rank - 1st 
StudentId 3, Score 41, Rank - 9th 
StudentId 4, Score 94, Rank - 1st. 

Ich versuche DENSE_RANK zu verwenden .. und das funktioniert gut, wenn ich diese gegen ein einzelnes Heimnetzgruppe (zB laufen. homegroup = 1) ... aber ich bin mir nicht sicher, wie ich das bei ALLEN Homegroups machen soll.

Ich schätze, ich brauche eine Update-Abfrage, die eine Unterabfrage hat ... und diese Unterabfrage hat eine eigene Unterabfrage ... ??

Ich bin ziemlich verwirrt :(Und ich denke nach bösen Cursors, die ich zu verwenden, es sei denn, ich habe eine Pistole an meinen Kopf (weil ich glaube, dass es richtig mit 'Set' Notation gehandhabt werden kann.)

Antwort

1

um die DENSE_RANK der einzelnen Schüler im Team zu erhalten: obwohl

SELECT *, DENSE_RANK() OVER (PARTITION BY Team ORDER BY Score DESC) 
    FROM Students; 

Ist mir nicht klar, was Sie den aktualisierenden

+0

Perfekt PARTITION war die ‚Gruppierung‘ Mechanismus i benötigt, um die... update wird eine einfache UPDATE-Abfrage mit der select-Anweisung u suggest, oben, einfach. wikid! –