Hallo hansa,
ich bin mir zwar nicht ganz sicher was du als Ergebnis sehen möchtes aber..
Zitat:
begin
SELECT SUM(MENGE) /*,MENGE */ FROM KSTAT WHERE (ID_ART = :ID_ART) AND
(MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT)
INTO :MONATSMENGE /*GROUP BY MENGE*/;
suspend;
end
in diesem Fall nach der Menge zu gruppieren ist nicht sinnvoll.
Ich denke nach Monat wäre das Richtige.
Das Problem ist aber, dass "GROUP BY" mehrere Gruppen (Datensätze) als Ergebnis erzeugen kann.
Dein Statement aber nur ein singleton-Ergebnis zuläßt.
Für meherer Ergebissätze mußt du das SELECT in ein FOR ..DO
packen.
SQL-Code:
CREATE PROCEDURE TESTSP ( VONMONAT INTEGER, BISMONAT INTEGER, ID_ART INTEGER)
RETURNS ( MONAT INTEGER, MONATSMENGE INTEGER)
AS
DECLARE VARIABLE MENGE INTEGER;
begin
FOR
SELECT
MONAT, SUM(MENGE)
FROM
KSTAT
WHERE
(ID_ART = :ID_ART) AND (MONAT >= :VONMONAT) AND (MONAT <= :BISMONAT)
group by
Monat
INTO
:Monat, :MONATSMENGE
DO
suspend;
end
Verwenden könnte man es z.B. so:
SQL-Code:
select A.*, T.MONAT, T.MONATSMENGE
from art A
LEFT join TESTSP(:VonMonat,:BisMonat, A.ID) T on (1=1)
where
A.NR=2
alex