* MIN und MAX der Jahre aller Datensätze
* für die Abfrage der Daten der jeweiligen Jahre:
eine Serie über MIN..MAX (
http://www.delphipraxis.net/188280-l...-finden-2.html )
oder einfach nur alle Jahre der Datensätze (DISTINCT ORDER BY und so)
* jeweils TAGE zwischen VON und BIS (+1, also inkl. des letzten Tages)
und TAGE zwischen Jahresanfang Max(JAHR, YearOf(VON))::DATE und Jahresende (Min(JAHR, YearOf(BIS))+1)::DATE-'1 day' ... auch +1
> damit kannst du schonmal den Anteile ausrechnen
* und nun erstmal die abgerundeten anteiligen Kosten ausrechnen
so, das am Besten gleich mal in nen VIEW, weil du das nochmal brauchst (oder du rechnest halt doppelt)
SELECT auf den VIEW und wenn YearOf(BIS) = YAHR, dann die Gesamtkosten des Datensatzes abzüglich der Kosten der Teiljahre und das Ergebnis (Rundungsdifferenzen) mit dazurechnen
und am Ende nochmal ein GROUP BY Jahr drüber (oder ohne GROUP, um zu sehn was von wo kommt)