ich würde das in etwa so machen
-erzeugen eine sp, die deine positionen zurückliefert mit suspend so wie du die brauchst
-die relevanten datensätze per for select in die return variablen packen und nach jedem record ein suspend
(for select ..... into ..... do begin ...... suspend; ..... end vereinfacht
-ein mal am anfang deine zwischensummen variablen mit 0 belegen
-wenn nach deiner Logik eine Zwischensumme kommen sollte, dann einfach das was gerade in der Zwischensumme zusammengerechnet wurde, in die passende Return Spalte eintrage, den rest ggf leeren und dann aufgrund deiner bedingung damit noch einen extra suspend mit den dann neuen variablen machen und bei bedarf die zwischensumme wieder auf 0 setzen
-die komplette spkannst du dann mit select * from spname (:ggf_Variablen_eingeben) von jedem Client aus aufrufen , also im report design, im grid oder wo auch immer
-wenn das editierbar bleiben soll, machst du noch einen updatable view oben auf die sp drauf
wenn du das alles im client machen willst, dann viel erfolg, datenbankseitig ist das mit firebird bordmitteln simpel zu machen, noch komplexer sogar wenn man dazu gtt global temporary tables benutzt. Mit einem
sql ginge das ähnlich wie in der sp mit execute block, aber es ist nicht damit getan, hier und dann mal eben sum und group by befehle einzubauen.
Hilft dir zwar nicht wirklich weiter (es sei denn du bist bei IBExpert Hotline kunde), aber ich geh davon aus, das man für das lauffähige Grundgerüst der Anforderung maximal 10-20 Minuten braucht und so was machen wir im Rahmen der Hotline für Kunden regelmßig. Ist halt eine Frage was einem (oder dem Arbeitgeber) die eigene Arbeitszeit wert ist, so was stunden- oder tagelang auszutüfteln, ohne irgendwelche Fortschritte zu machen.