View Full Version : SQL laufende Nr. Denkanstoss gesucht. V5R4
KingofKning
29-07-14, 08:06
Hallo *all,
ich muß für eine Schnittstellen-Datei eine View erstellen in der pro Kunde die offenen Posten jeweils eine laufende Nummer bekommen.
Kunde 11173 Pos 1 Beleg 12345 offen 500€
Kunde 11173 Pos 2 Beleg 56894 offen 100€
Kunde 11173 Pos 3 Beleg 78711 offen 200€
Kunde 11994 Pos 1 Beleg 56665 offen 10€ etc.
Teile der Beleg-Nummer scheidet aus, da die nicht wirklich eindeutig sind.
Welche Möglichkeiten habe ich da?
(Wobei ich der Meinung bin das Thema hatten wir schon mal, habe es aber leider nicht gefunden)
GG
Ab V6 geht das mit "row_number() over (order by Beleg)".
Vor V6 hast du leider keine Chance dies per SQL zu lösen.
Das geht mit OLAP Ranking-Funktionen.
Create View YourSchema.YourView
as (Select Row_Number() Over(Partition By Kunde Order By OffenePosten) lfd,
a.*
From YourTable);
@Baldur:
OLAP-Ranking Funktionen wurden mit V5R4 eingeführt und für einen Gruppen-Wechsel ist die PARTITION BY-Anweisung erforderlich.
Birgitta
KingofKning
29-07-14, 08:58
Hallo Birgitta,irgendwann möchte ich ja mal Mäuschen spielen und sehen bei welchen SQL-Problemen Du dich anstrengen musst.Danke für die Lösung.GG
Das mit dem SQL ist immer so eine Sache.
Im Moment habe ich auf V5R2 das Problem, dass ein skalarer Subselect mit Count(*) in keinster Weise einen Index verwenden will und noch nicht mal einen Vorschlag dazu hat.
Dabei würde der Primary Index vollkommen genügen.
Da es sich um embedded SQL handelt, lese ich nun die benötigten Information beim Fetch einzeln aus und das geht wieder sauschnell.
holgerscherer
29-07-14, 13:54
Hallo Birgitta,irgendwann möchte ich ja mal Mäuschen spielen und sehen bei welchen SQL-Problemen Du dich anstrengen musst.Danke für die Lösung.GG
Ein Tetris in SQL zu realisieren könnte auch für Biggi etwas Arbeit sein ;-) Ansonsten wird das schon eine Herausforderung.
Ich möchte nur meine Alarmglocke bei "Belegnummer nicht eindeutig" vermerkt haben...
KingofKning
29-07-14, 18:26
Kannst die Alarmglocke wieder abschalten,
die lfd-Nr. ist 4 Stellig, die Beleg-Nr. 10 stellig. Da kann ich nicht garantieren das ein Teil der Beleg-Nr. eine eindeutige lfd-nr. ergibt. Insbesondere nicht so schön fortlaufend.
GG
Hallo Birgitta,irgendwann möchte ich ja mal Mäuschen spielen und sehen bei welchen SQL-Problemen Du dich anstrengen musst.Danke für die Lösung.GG
Das eine oder andere gibt es da schon noch!
Tetris muss es nicht unbedingt sein. Mir reichen schon die dynamischen SQL Statemente mit Single und Double Byte Characters und Funktionen, die keine CCSID-Konvertierung zulassen.
Birgitta