Datenbank: MySQL • Version: 5 • Zugriff über: FireDac
Hallo Zusammen,
ich habe eine größere Query, bei der ich bei einer Spalte Hilfe brauche...
Ich möchte den Lagerabgang und den Lagerzugang (geplant) in einer Tabelle darstellen. Dann möchte ich den kummulierten Lagerbestand darstellen. Lagerabgang sind Kundenaufträge und Lagerzugang sind Produktionsaufträge und sind in unterschiedlichen Tabellen. Meine Query sieht bis jetzt so aus:
select a1.lgzgda as Datum,
'' as Kunden,
'' as Bedarf,
'' as Lager,
concat(a1.waaunr, '-', a1.waaupo) as Auftrag,
a1.wafemg as Auftragsmenge,
a1.oaagnr,
concat('(', oamanr,') ', a1.oaagbz) as AGBezeichnng,
a1.kritfa,
date_format(a1.Epress,'%d.%m.%Y') as theodate,
date_format(eilfa.start,'%d.%m.%Y') as start,
concat(benutzer.as400kz,': ','(', kommentfa.ag,') ',kommentfa.kommentar) as Kommentar,
eilfa.angesehen,
eilfa.angeschoben,
a1.epressproz,
a1.emuster
from as400 as a1
left join eilfa on eilfa.waaunr=a1.waaunr and eilfa.waaupo=a1.waaupo and eilfa.oaagnr=a1.oaagnr
left join kommentfa on kommentfa.waaunr=a1.waaunr and kommentfa.waaupo=a1.waaupo and kommentfa.id=
(select max(id) from kommentfa where kommentfa.waaunr=a1.waaunr and kommentfa.waaupo=a1.waaupo)
left join benutzer on concat(benutzer.vorname,'',benutzer.name)=kommentfa.verfasser
where oatlkz<>9 and watenr= 10009923 and a1.lgzgda<>'0000-00-00'
group by a1.waaunr
union
select ltlite as Datum,
kdkuna as Kunden,
liefer as Bedarf,
'' as Lager,
'' as Auftrag,
'' as Auftragsmenge,
'' as oaagnr,
'' as AGBezeichnung,
'' as kritfa,
'' as theodate,
'' as Start,
'' as Kommentar,
'' as angesehen,
'' as angeschoben,
'' as epressproz,
'' as emuster
from omslp
where watenr= 10009923
order by Datum asc, oaagnr desc
Das Ergebnis habe ich mal als Bild an den Post gehängt. In diesem Bild habe ich auch in rot eingezeichnet, was das Ziel ist...
In der ersten Spalte ist das Datum. Überall da, wo ein Kunde drinsteht, ist auch für dieses Datum ein Abgang geplant. Wenn kein Kunde da steht, dann steht ein der Spalte Auftrag eine Nummer. Zu dem Datum in Spalte 1 muss der Auftrag fertig werden. Die Daten hier sind in der Vergangenheit - alte Datenbasis - im echten Leben sind die in der Zukunft...
Kann mir jemand helfen, wie ich die Kummulierung für Spalte 4 (Lager) hinbekomme? Ich würde in die erste Zeile den Lagerbestand aktuell holen (12.000) und die Auftragsmenge aus Zeile 1 addieren (Auftragsmenge=213752). In der zweiten Zweile würde ich von der Summe der ersten Zeile die Spalte Bedarf (39000) subtraieren...
Ich hatte einmal die gleiche Aufgabenstellung + das so zu lösen war bei geringer Datenmenge ganz brauchbar. je mehr daten aber im System waren, desto langsamer wurde das. Außerdem gibt es irgendwann sowas wie Inventureinträge, manuelle Lagerkorrekturen etc.. Ich hatte damals auch noch einen (Mischpreis)mit in Spiel.
Erster Versuch war, für den Lagerbestand eine eigene Funktion zu schreiben, die man dann mit
einbindet. Geht gut, ist irgendwann nicht performant.
Zweiter Versuch: Idee: Habe ich den Lagerbestand als Attribut in meiner Tabelle, kann ich ihn einfach ausgeben und muss ihn nicht jedes Mal neu berechnen. Ich muss ihn nur berechnen, wenn er sich ändert. Wann ändert er sich? bei INSERT/DELETE/UPDATE -- > Das schreit nach TRIGGER.
Wenn ich Dich richtig verstanden habe, möchtest Du da so eine Art Spreadsheet Veranstaltung draus machen. ("vorige Zeile .. usw.").
Das ist eingedenkt des vorigen Beitrages kein Spaß in SQL. SQL arbeitet erstmal Mengen-orientiert und kennt die vorige Zeile nicht.
Kurz:
Du möchtest Windows Functions benutzen und dazu möchtest Du glaub ich eine aktuellere DB Version. Mit der ollen mySQL wird es unschön.
die MySQL-Version kann ich aktuell nicht ändern. Ich glaube, dass wird zu kompliziert, sodass es einfacher wird, dass über eine Schleife im Nachgang laufen zu lassen.