Romero
Fleissiger Benutzer
- Beiträge
- 51
Hallo zusammen,
bisher habe ich nachstehendes Problem bisher nur per Schleife z.B. im VBA lösen können.
Doch nun bräuchte ich eine Lösung via SQL.
Folgende Problematik habe ich:
Mittels Datenbank-Abfrage erhalte ich nachstehende Ausgangstabelle:
Die Tabelle ist nach den Kriterien Datum, Bestellnummer, Bestellposition, Komp.-ID sortiert. Die Gesamt-Menge (Ges.-Menge) ergibt sich aus der Spalte Menge x Komp.-Menge und ist die auszuwertende Menge.
Anmerkung: zu einer Mat-ID können noch weitere Komp.-IDs untergeordnet sein.
Grundlegend soll (gemäß der obigen Tabelle) im ersten Schritt die Gesamt-Menge von dem Lagerbestand abgezogen und als "neuer Lagerbestand" angezeigt werden.
Das habe ich mittels SUM(...) OVER (PARTITION BY ... ORDER BY ...) umgesetzt.
Nun folgt aber der nächste Part, welcher ich bisher nur per Schleife lösen konnte.
Zu jeder Komp.-ID werden immer wieder Aufträge erstellt/ausgelöst, welche in die obige Tabelle mit einfließen müssen.
Diese Auftrags-Tabelle sähe so aus:
Diese Tabelle wurde sortiert nach Vorgangsposition (je höher die Zahl, desto fortgeschrittener ist der Auftrag), danach nach der Auftragsnummer (Nummer ist fortlaufend).
Am Ende müsste die obige Basis-Tabelle mit der unteren Auftragstabelle so gejoined werden, damit nachstehende neue Tabelle entsteht:
Nun die Frage: ist das so mittels SQL auflösbar? Wenn ja, wie?
Wichtig sei: zuerst immer aus dem Lager, bis Lager leer ist. Dann soll geprüft werden, ob Aufträge vorhanden sind bzw. diese aufgelistet werden (sortiert), und die restlichen Positionen einfach mit Status leer beschreiben.
Vielen Dank schon mal im Voraus...
LG Romero
bisher habe ich nachstehendes Problem bisher nur per Schleife z.B. im VBA lösen können.
Doch nun bräuchte ich eine Lösung via SQL.
Folgende Problematik habe ich:
Mittels Datenbank-Abfrage erhalte ich nachstehende Ausgangstabelle:
Bestellnummer | Bestellposition | Material-ID | Datum | Menge | Komp.-ID | Komp.-Menge | Ges.-Menge | Lagerbestand | neuer Lagerb. |
---|---|---|---|---|---|---|---|---|---|
7000145459 | 100 | 12345678 | 27.05.2025 | 1 | 12345678 | 1 | 1 | 4 | 3 |
7000145459 | 200 | 23456789 | 27.05.2025 | 1 | 12345678 | 1 | 1 | 4 | 2 |
7000145459 | 300 | 34567890 | 27.05.2025 | 1 | 12345678 | 3 | 3 | 4 | -1 |
7000145459 | 400 | 45678901 | 27.05.2025 | 1 | 12345678 | 6 | 6 | 4 | -7 |
7000145459 | 500 | 56789012 | 27.05.2025 | 3 | 12345678 | 2 | 6 | 4 | -13 |
7000145459 | 600 | 67890123 | 27.05.2025 | 2 | 12345678 | 2 | 4 | 4 | -17 |
7000145459 | 700 | 78901234 | 27.05.2025 | 1 | 12345678 | 1 | 1 | 4 | -18 |
7000145459 | 800 | 89012345 | 27.05.2025 | 1 | 12345678 | 1 | 1 | 4 | -19 |
7000145459 | 900 | 90123456 | 27.05.2025 | 1 | 12345678 | 2 | 2 | 4 | -21 |
7000145459 | 1000 | 01234567 | 27.05.2025 | 1 | 12345678 | 1 | 1 | 4 | -22 |
Anmerkung: zu einer Mat-ID können noch weitere Komp.-IDs untergeordnet sein.
Grundlegend soll (gemäß der obigen Tabelle) im ersten Schritt die Gesamt-Menge von dem Lagerbestand abgezogen und als "neuer Lagerbestand" angezeigt werden.
Das habe ich mittels SUM(...) OVER (PARTITION BY ... ORDER BY ...) umgesetzt.
Nun folgt aber der nächste Part, welcher ich bisher nur per Schleife lösen konnte.
Zu jeder Komp.-ID werden immer wieder Aufträge erstellt/ausgelöst, welche in die obige Tabelle mit einfließen müssen.
Diese Auftrags-Tabelle sähe so aus:
Auftragsnummer | Material-ID | Vorgangsposition |
---|---|---|
81234567 | 12345678 | 500 |
82345678 | 12345678 | 400 |
83456789 | 12345678 | 300 |
84567890 | 12345678 | 100 |
85678901 | 12345678 | NULL |
Am Ende müsste die obige Basis-Tabelle mit der unteren Auftragstabelle so gejoined werden, damit nachstehende neue Tabelle entsteht:
Material-ID | Komp.-ID | Ges.-Menge | Status | neuer Lagerb. | Auftragsnummer | Vorgangspos. |
---|---|---|---|---|---|---|
12345678 | 12345678 | 1 | aus Lager | 3 | ||
23456789 | 12345678 | 1 | aus Lager | 2 | ||
34567890 | 12345678 | 1 | aus Lager | 1 | ||
34567890 | 12345678 | 1 | aus Lager | 0 | ||
34567890 | 12345678 | 1 | aus Auftrag | -1 | 81234567 | 500 |
45678901 | 12345678 | 1 | aus Auftrag | -2 | 82345678 | 400 |
45678901 | 12345678 | 1 | aus Auftrag | -3 | 83456789 | 300 |
45678901 | 12345678 | 1 | aus Auftrag | -4 | 84567890 | 100 |
45678901 | 12345678 | 1 | aus Auftrag | -5 | 85678901 | NULL |
45678901 | 12345678 | 1 | fehlt | -6 | ||
45678901 | 12345678 | 1 | fehlt | -7 | ||
56789012 | 12345678 | 1 | fehlt | -8 | ||
... | ... | ... | ... | ... |
Nun die Frage: ist das so mittels SQL auflösbar? Wenn ja, wie?
Wichtig sei: zuerst immer aus dem Lager, bis Lager leer ist. Dann soll geprüft werden, ob Aufträge vorhanden sind bzw. diese aufgelistet werden (sortiert), und die restlichen Positionen einfach mit Status leer beschreiben.
Vielen Dank schon mal im Voraus...
LG Romero