Hallo Scampi,
Du hast ja vermutlich mindestens 3 Tabellen: Zugang, Obst und Abgang ('Obst' heißt natürlich 'Obst_Gemüse' oder ähnlich).
In der Tabelle "Zugang" sind mindestens die Felder "Datum", "Anzahl" und "Obst_ID" (Fremdschlüssel aus der Tabelle "Obst")
Die Tabelle "Abgang" sieht von den Feldern her genauso aus.
liefert alle Zugänge unabhängig von der Obst- oder Gemüsesorte und unabhängig vom Datum.
Code: Alles auswählen
SELECT SUM("Anzahl") FROM "Zugang" WHERE "Datum" < '2014-04-01'
liefert alle Zugänge unabhängig von der Obst- oder Gemüsesorte bis zum 1.4.2014 Datum.
Code: Alles auswählen
SELECT SUM("Anzahl") FROM "Zugang" WHERE "Datum" < '2014-04-01' AND "Obst_ID" = 1
liefert alle Zugänge, die in der Tabelle "Obst" unter der ID '1' (Primärschlüssel in der Tabelle "Obst") verzeichnet sind, bis zum 1.4.2014 Datum.
Code: Alles auswählen
SELECT SUM("Anzahl") FROM "Zugang" WHERE "Datum" < :Datum AND "Obst_ID" = 1
fragt bei der Abfrage nach einer Datumsangabe.
Und jetzt "Zugang" und "Obst":
Code: Alles auswählen
SELECT "ID", "Obst", (SELECT SUM("Anzahl") FROM "Zugang" WHERE "Datum" < :Datum AND "Obst_ID" = "a"."ID") AS "Zugang" FROM "Obst" AS "a"
Die Summe wird genau für das Obst abgefragt, das in der äußeren Abfrage steht. Dies wird durch die Zuweisung eines "a" zu der Tabellenbezeichnung der Tabelle der äußeren Abfrage erreicht. Der Text für den Abgang ist identisch mit dem des Zuganges - bis auf die betroffene Tabelle. Komplett mit Saldo sieht das dann so aus:
Code: Alles auswählen
SELECT "ID", "Obst", (SELECT SUM("Anzahl") FROM "Zugang" WHERE "Datum" < :Datum AND "Obst_ID" = "a"."ID") AS "Zugang" , (SELECT SUM("Anzahl") FROM "Abgang" WHERE "Datum" < :Datum AND "Obst_ID" = "a"."ID") AS "Abgang", (SELECT SUM("Anzahl") FROM "Zugang" WHERE "Datum" < :Datum AND "Obst_ID" = "a"."ID") - (SELECT SUM("Anzahl") FROM "Abgang" WHERE "Datum" < :Datum AND "Obst_ID" = "a"."ID") AS "Saldo" FROM "Obst" AS "a"
Gruß
Robert