Hallo,
jetz brauche ich doch noch mal Hilfe bei meiner
SQL Abfrage.
Was will ich hier erreichen.
Ich muss die empfohlene Bestellmenge wie folg berechnen.
Normmenge - Lager_ist - bereistbestellt + Rückstände
Mein Lager umfasst ca 10 000 Artikel.
Aktuell habe ich meine Abfrage wie folgt aufgebaut, läuft auch, wenn in der Rückständetabelle, bereistbestellte-Tabelle nur wenige Einträge vorhanden sind schnell. Sobald aber in den Tabellen der Rückstände bzw. bereist bestellten viele Einträge (> ca. 50) ist dies mit langen Wartezeiten verbunden.
Nun bin ich was
SQL betrifft noch am Anfang meiner Lernkurve, und denke, dass sich hier noch etwas optimieren lässt. Leider kann Firebird im Wherer keine Alias verabeiten.
Hat jemand einen Tipp wie ich hier im WHERE optimieren kann ?
SQL-Code:
Select A.Art_ID, A.Art_HERSTNR, A.Art_LIEFERANT_ID, A.Art_VKTEXT_DE AS VKText,
((SELECT ( (A.Art_Lag_NORM-A.Art_Lag_IST) - IIF(SUM(N.NBEST_BESTM) IS NULL, 0, SUM(N.NBEST_BESTM))FROM NACHBESTELLUNG N WHERE N.NBEST_Art_ID = A.Art_ID)+
(SELECT IIF(SUM(r.Art_MENGE) IS NULL, 0, SUM(r.Art_MENGE)) FROM RUE_Art r WHERE R.Art_ID = A.Art_ID )) as Empfehlung,
(A.Art_Lag_NORM-A.Art_Lag_IST) AS Bedarf,
SELECT IIF(SUM(r.Art_MENGE) IS NULL, 0, SUM(r.Art_MENGE) ) FROM RUE_Art r WHERE R.Art_ID = A.Art_ID) as Rueckstand,
SELECT (IIF(SUM(N.NBEST_BESTM) IS NULL, 0, SUM(N.NBEST_BESTM))-IIF(SUM(N.NBEST_LIEFERMENGE) IS NULL,0,SUM(N.NBEST_LIEFERMENGE))) FROM NACHBESTELLUNG N WHERE N.NBEST_Art_ID = A.Art_ID) as Bestellt ,
A.Art_Lag_IST , A.Art_Lag_MIN , A.Art_Lag_NORM WHERE A.Art_Lag_IST + (SELECT IIF(SUM(N.NBEST_BESTM) IS NULL, 0, SUM(N.NBEST_BESTM))) FROM NACHBESTELLUNG N
WHERE N.NBEST_Art_ID = A.Art_ID) - (SELECT IIF(SUM(r.Art_MENGE) IS NULL, 0, SUM(r.Art_MENGE)) FROM RUE_Art r WHERE R.Art_ID = A.Art_ID )) <= A.Art_Lag_MIN and A.Art_LIEFERANT_ID = :xLiefernat_ID;
Ich habs jetzt temporär mit einem Filter gelöst und die Where nur auf den
A.Art_LIEFERANT_ID = :xLiefernat_ID
gesetzt. Geht sicher eleganter ??