Hallo!
Das hatten wir in der letzten Woche schon.
Eine Datenbank hat keine RowID, weil sie die Daten ja in beliebiger
Reihenfolge herausgeben kann, die Zeilennummer sich also st�ndig
ver�ndert.
Wenn Du die Daten mit ADO ausliest, steht Dir rs.AbsolutePosition als
Zeilennummer zur Verf�gung, aber das willst Du ja nicht.
Wenn Du aus dem Recordset eine XML-Datei erzeugst, kannst Du die
Zeilennummer sicher mit XSL einbauen, oder?
Wenn Du Deine Abfrage aber sortierst, kannst Du einen Ranking-Wert
direkt in SQL berechnen:
Zun�chst eine View f�r die Selektions- und Sortierkriterien...
Select *
>From Tabelle
Where ...
Order By ...
... und dann folgendes Konstrukt:
Select *, (
Select count(*)
From View As B
Where A.f1 <= B.f1 ...
)
>From View as A
In der Unterabfrage z�hlst Du einfach die Datens�tze, deren
Sortierkriterium <= dem des aktuellen Datensatzes ist. Beim ersten
Datensatz ist das 1, beim zweiten 2, u.s.w.. Wenn Du DESCENDING statt
ASCENDING sortierst, musst Du nat�rlich mit ">=" vergleichen. Die
Where-Klausel der Unterabfrage enth�lt exakt die gleichen Spalten wie
die Order-By-Klausel der View.
Bei einem eindeutigen Sortierkriterium erh�ltst Du so wirklich
fortlaufende Zahlen. Ist das Sortierkriterium nicht eindeutig, solltest
Du in der Where-Klausel der Unterabfrage mit "<" statt "<=" arbeiten und
daf�r die Anzahl um 1 erh�hen, damit Du einen echten Ranking-Wert
erh�ltst.
Beispiel "Bundesliga"
View (Tabelle):
Select *
>From Teams
Order By Punkte Desc, Tordifferenz Desc, Tore Asc
Ranking:
Select *, (
Select Count(*)
From Tabelle As B
Where A.Punkte >= B.Punkte
And A.Tordifferenz >= B.Tordifferenz
And A.Tore > B.Tore
) + 1 As Ranking
>From Tabelle As A
Order By Punkte Desc, Tordifferenz Desc, Tore Asc
Freundliche Gr��e
Joachim van de Bruck
| [aspdedatabase] als [email protected] subscribed
| http://www.aspgerman.com/archiv/aspdedatabase/ = Listenarchiv
| Sie k�nnen sich unter folgender URL an- und abmelden:
| http://www.aspgerman.com/aspgerman/listen/anmelden/aspdedatabase.asp