Einzelnen Beitrag anzeigen

waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Arbeiten in einem temporären TJvMemoryData

  Alt 8. Mai 2014, 20:57
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 ??
mfg wf

Geändert von waldforest ( 9. Mai 2014 um 18:51 Uhr)
  Mit Zitat antworten Zitat