[Oracle] Anzahl aus zwei Zeilen errechnen

Dunas

Erfahrenes Mitglied
Gute Abend zusammen,
ich habe eine Tabelle in welcher Artikel mit ihrer Bestellanzahl drin stehen. Nun kann es sein, dass ein Artikel komplett durch einen anderen ausgetauscht wird. Dabei wird in der Tabelle eine neue Zeile eingefügt, welche gleich zur vorherigen ist bis auf die Anzahl welche auf 0 gesetzt wurde.

Tabelle
ID int
Auftrag int
ArtikelId int
ArtikelPosition int
ArtikelText string
Anzahl int

Code:
ID|Auftrag |Artikel |Position   |Text          |Anzahl
1 |4637    |A003    |1          |Funkmaus      |2
2 |4637    |A034    |2          |Kabel         |1

Wird nun die Funkmaus gelöscht wird eine neue Zeile erstellt
Code:
ID|Auftrag |Artikel |Position   |Text          |Anzahl
1 |4637    |A003    |1          |Funkmaus      |2
2 |4637    |A034    |2          |Kabel         |1
3 |4637    |A003    |1          |Funkmaus      |0

Ich würde jetzt gerne in meiner Abfrage beide Artikel mit ihrer aktuellen Anzahl zurückgeliefert bekommen.
1 |4637 |A003 |1 |Funkmaus |0
2 |4637 |A034 |2 |Kabel |1
Besonderheid: Zum teil kommt es vor, dass die ArtikelPosition nicht übereinstimmt mit dem alten Eintrag.
So kann die Tabelle, nach dem löschen, auch so aussehen

Code:
ID|Auftrag |Artikel |Position   |Text          |Anzahl
1 |4637    |A003    |1          |Funkmaus      |2
2 |4637    |A034    |2          |Kabel         |1
3 |4637    |A003    |3          |Funkmaus      |0

Ich finde einfach momentan keinen Ansatz für eine SQL-Abfrage. Weder für die einfachere Variante noch für die etwas härtere.

Ich kann auch an dem vorhandenen System nichts ändern. Ich habe nur die Daten.
 
Zuletzt bearbeitet:
Hallo,
ich habe erst heute wieder an dieser Front weiter kämpfen können.
Ich habe es nun so gelöst:

SQL:
Select auf1.auftrag,auf1.artikel,auf1.text,auf2.anzahl as mengeBevor, auf2.anzahl as mengeAfter from auftrag auf1
left join auftrag auf2
on auf1.auftrag = auf2.auftrag and auf1.artikel = auf2.artikel
where auf1.anzahl != auf2.anzahl
 
Zuletzt bearbeitet von einem Moderator:
Zurück