Hi, nachdem ich jetzt mal Zeit gefunden hatte, mir die Sache mal anzuschauen ...
-
u.a. deine Beispieldaten ergeben keinen Sinn ... du hast fuer LieferscheinId 3 keine Lieferscheinartikel
-
dein Datenmodell passt auch nicht wirklich zu folgendem Anwendungsfall
Liste mir alle Artikel des Bestellvorgangs (JOIN über VorgangsID und Belegart) auf und zeige mir, ob und oin welcher Anzahl hiervon schon welche geliefert wurden
- die Existenz einer Sinnhaftigkeit von IndexID moechte ich mal stark anzweifeln
- dito fuer die Tabelle "Lieferscheinartikel"
Loesung: Ab zurueck ans Reissbrett.
Du hast Bestellvorgaenge (z.b. identifiziert durch Bestellnummer, bei dir wahrscheinlich "VorgangsID", fein). Dazu sollte es eine Tabelle "Bestellartikel" geben, welche "ArtNr" mit (oder ohne) Menge zu einer VorgangsID zuordnet.
Dann ist die Abfrage einfach: Liste mir alle Artikel einer Bestellung die geliefert haetten werden sollen.
Weiters hast du deine Tabelle Lieferscheine welche die Belege (was auch immer "CDE" bedeuten mag) zu einer Bestellung (VorgangsId) in Beziehung setzen. Lieferscheine haben auch eine technische ID (LieferscheinID).
Vorausgesetzt das ein Lieferschein immer zu einer Bestellung gehoert, aber eine Bestellung mehrere Lieferscheine (Lieferungen) haben kann.
Weiters gibt es es eine Tabelle Lieferscheinmengen. Lieferscheinmengen verweist auf LieferscheinID (welche wiederum eindeutig auf VorgangsID verweist) und auf ArtNr und beinhaltet zusaetzlich einfach die gelieferte Menge.
Damit wird die Abfrage dann auch einfach(er)
SELECT B.VorgangsID, B.ArtNr, SUM(BA.Menge) AS MengeBestellt, SUM(LM.Menge) AS MengeGeliefern, GROUP_CONCAT(LM.Sonstiges)
FROM Bestellvorgaenge B
INNER JOIN BestellvorgaengeArtikel BA ON B.VorgangID = BA.VorgangID
LEFT JOIN Lieferscheine L ON L.VorgangID = B.VorgangID
LEFT JOIN Lieferscheinmengen LM ON LM.LieferscheinID = L.LieferscheinID AND LM.ArtNr = BA.ArtNr
GROUP BY VorgangsID, ArtNr
Uebrig bleibt das Problem das fuer manche bestellte ArtNr evt. Ersatzartikel mit anderer ArtNr geliefert werden. Da loest du einfach damit in dem du in Lieferscheinmengen eine Spalte "ErsetztArtNr" einfuegst oder diese Verknuepfungen in einer separaten Tabelle speicherst, quasi nur ArtNr zu ArtNr.
Ich hoffe die Infos helfen dir weiter.
Cheerio aus der Kararibik :-)
Frank