View Full Version : laufende Nummer in Select
Hallo *ALL,
ich suche eine Möglichkeit in einem Select eine laufende Nummer als weiteres Feld anzuzeigen.
Ich meine dabei nicht die rrn!
Select vorname, name from Kunde:
Hans, Meier
Ula, Schmidt
Select ? , name, vorname from kunde:
1,Hans,Meier
2,Ulla Schmidt
Danke für euer Hilfe :)
Versuche es mal in der Art
Select count(*) as LFDNR, a.name, a.vorname
from Kunde a, Kunde b
where a.name concat a.vorname >= b.name concat b.vorname
group by a.name, a.vorname
order by LFDNR
Gruß
Ronald
Gibts, zumindest ab V6R1 als SQL-Funktion ROWID() (o.ä.) in jedem Select.
Damit wird dann jedem selektierter Satz gezählt, solange, wie der Cursor des Selects offen ist, bzw. bis ein anderes Select geöffnet wird.
Habs auch als User-Defined-SQL-Function gesehen; in V6R1 ist es noch ein schlecht dokumentiertes Feature zum Beispiel für Datawarehouses.
Mußte eben mal ausgiebiger Googlen. (Hab leider keine Zeit, es jetzt für Dich rauszusuchen.)
... das gibts bereits ab V5R4 (mindestens) schon ordentlich mit den OLAP Funktionen rank dense_rank und rowid, bei denen dann zusätzlich noch Sortierfelder angegeben werden.
D*B
Nicht ROWID sondern Row_Number().
RowId ist ein eigener Datentyp. Beim Insert (oder Write mit native I/O) wird in einer ROWID-Spalte ein eindeutiger Wert generiert, der jedoch nicht (zwingend) in auf- oder absteigender Reihenfolge ist.
Im folgenden Beispiel wird eine laufende Nr. abh. von der endgültigen Sortierung (order By) gebildet, d.h. 1. Satz = 1, 2.Satz = 2 .... n. Satz = n:
Select Row_Number() Over() as Lfd, Fld1, Fld2, ... FldN
From MyFile
Where ....
Order By ...
Die Angabe von Order By innerhalb der OVER-Anweisung erlaubt eine von der endgültigen Sortierung abweichende Generierung einer laufenden Nr.
Birgitta
... danke für die Korrektur, parallel schreiben zum denken geht manchmal schief...
Casus knaxus bei den OLAP Spezifikationen (so nenne sich diese Funktionen) ist, dass man dann auch nach denen sortieren, selektieren und gruppieren kann.
Wobei diese Dinger zuweilen nicht sehr flott sind.
D*B
Nicht ROWID sondern Row_Number().
RowId ist ein eigener Datentyp. Beim Insert (oder Write mit native I/O) wird in einer ROWID-Spalte ein eindeutiger Wert generiert, der jedoch nicht (zwingend) in auf- oder absteigender Reihenfolge ist.
Im folgenden Beispiel wird eine laufende Nr. abh. von der endgültigen Sortierung (order By) gebildet, d.h. 1. Satz = 1, 2.Satz = 2 .... n. Satz = n:
Select Row_Number() Over() as Lfd, Fld1, Fld2, ... FldN
From MyFile
Where ....
Order By ...
Die Angabe von Order By innerhalb der OVER-Anweisung erlaubt eine von der endgültigen Sortierung abweichende Generierung einer laufenden Nr.
Birgitta
Wobei ich mir das in embedded SQL (Function/Procedure) wohl eher schenken kann, da ich die Sätze doch einfach selber zählen kann.