wenn du je Artikel aus der Tabelle ART nur eine Gesamtmenge
benötigst, hattest du eigentlich bereits die Lösung mit deiner SP.
Für die Summe über alles (das SELECT darf dann nur Aggregat-Funktionen beinhalten) wird keine GROUP BY benötigt. Ohne GROUP BY wird auch immer nur ein Datensatz in der Ergebnismenge zurückgegeben.
Damit wird FOR..DO.. überflüssig.
Es fehlte nur der richtige Aufruf der SP.
Hier nochmal die SP für die Gesamtmengen (ich habe MONATSMENGE in GESMENGE umbenannt)
SQL-Code:
CREATE PROCEDURE TESTSP_GES (
VONMONAT INTEGER,
BISMONAT INTEGER,
ID_ART INTEGER)
RETURNS (
GESMENGE INTEGER)
AS
begin
SELECT
SUM(MENGE)
FROM
KSTAT
WHERE
(ID_ART = :ID_ART) AND (MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT)
INTO
:GESMENGE;
IF (GESMENGE is NULL) THEN GESMENGE = 0;
suspend;
end
und der Aufruf
SQL-Code:
select A.NR, A.BEZ, T.GESMENGE
from art A
left join TESTSP_GES(:VonMonat,:BisMonat, A.ID) T on (1=1)
das Ganze könne man aber auch damit erreichen
SQL-Code:
SELECT A.NR, A.BEZ, COALESCE(SUM(K.MENGE),0)
from
ART A
left join KSTAT K on (K.ID_ART=A.ID)
GROUP BY
1, 2
wichtig ist nur, daß in GROUP BY alle Nicht-Aggregat-Felder enthalten sind.
alex