Anmelden

View Full Version : laufende Nummer in Select



cimbala
08-05-10, 19:52
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 :)

malzusrex
08-05-10, 22:23
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

UFK
08-05-10, 23:52
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.)

BenderD
09-05-10, 07:34
... 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

B.Hauser
09-05-10, 13:33
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

BenderD
09-05-10, 14:00
... 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

Fuerchau
10-05-10, 07:51
Wobei ich mir das in embedded SQL (Function/Procedure) wohl eher schenken kann, da ich die Sätze doch einfach selber zählen kann.