Hallo,
ich hätte das ohne Cursor gelöst.
Habe gerade mal dein Beispiel umgesetzt.
1. Erstelle ich eine temporäre Tabelle:
SQL-Anweisung
1: 2: 3: 4: 5: 6:
| create table ( col1 int not NULL IDENTITY (1, 1), wert1 varchar(5), wert2 varchar(5) ) |
2. Schreibe ich die Daten in der Reihenfolge, in der sie später erscheinen sollen, in die Tabelle.
In deinem Fall wäre das wohl ein "Select ... from ... into #temp".
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| insert into values ('1', 'a')
insert into values ('1', 'b')
insert into values ('1', 'c')
insert into values ('2', 'd')
insert into values ('3', 'b')
insert into values ('3', 'c') |
3. Danach selektiere ich die Daten:
SQL-Anweisung
1: 2: 3:
| select *, (select COUNT(*)+1 from from order by col1 |
Der Subselect zählt alle Datensätze, die vor dem aktuellen stehen, und gibt die Zahl als Spalte aus.
4. Danach nur noch die temporäre Tabelle entfernen:
SQL-Anweisung
Ergebis schaut so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| col1 wert1 wert2 Zahler ----------- ----- ----- ----------- 1 1 a 1 2 1 b 2 3 1 c 3 4 2 d 1 5 3 b 1 6 3 c 2 |