Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: SQL Abfrage über Bewegungen

  Alt 1. Okt 2008, 18:15
Also die Abfragen erscheinen mir noch wenig effizient zu sein.
Man muss doch bei den Lagerbewegungen anfangen und diese schon mit GROUP BY "eindampfen".
Dieses frühzeitige Reduzieren der Datenmenge spart dem Server viel Zeit und Resourcen (Abfrage 1):
SQL-Code:
SELECT Materialkennummer, COUNT(*) AS AnzahlBeweg
FROM dbo.Lagerbewegung
WHERE Bewegung = N'Abgang'
GROUP BY Materialkennummer
Es gibt jetzt pro Materialkennummer nur einen Datensatz.
Nächster Schritt wäre die Datumseinschränkung (Abfrage 2):
SQL-Code:
SELECT Materialkennummer, COUNT(*) AS AnzahlBeweg
FROM dbo.Lagerbewegung
WHERE Bewegung = N'AbgangAND aktuelles_Datum >= :MinDatum AND aktuelles_Datum <= :MaxDatum)
GROUP BY Materialkennummer
Es ist empfehlenswert, wie oben gezeigt den Zeitbereich über die Parameter :MinDatum und :MaxDatum auszuwählen, anstatt das feste Jahresschema anzuwenden.

Diese Abfrage wird jetzt mit der Lagerliste verjoint (Abfrage 3):
SQL-Code:
SELECT Lagerliste.*, DevTbl.* FROM
Lagerliste INNER JOIN (@@@) DevTbl ON Lagerliste.Kennummer=DevTbl.Materialkennummer
ORDER BY Lagerliste.Kennummer
Der Platzhalter @@@ steht für die Abfrage 2.
Ich habe mit Absicht die Abfrage 2 nicht in die Abfrage 3 einkopiert, damit man besser die Struktur sieht.

Der Unterschied zwischen der Abfrage in Beitrag #5 und meinem Vorschlag ist, dass bei meinem Vorschlag zuerst gruppiert und dann verjoint wird.
Im Beitrag #5 ist das Gruppieren nachgelagert und verursacht damit einige Probleme.
Der Ausdruck MAX(a.Warenbezeichnung) AS Warenbezeichnung ist eigentlich nur aus der Not geboren und macht ansonsten Sinn.
Andreas
  Mit Zitat antworten Zitat