/* Die Summen für alle Verträge, bei denen der Vertrag im Jahr beginnt oder endet. */
select
sum(BetragStartJahr) as BetragStartJahr,
sum(BetragEndeJahr) as BetragEndeJahr
from (
/* Nun die Anteile der bezahlten Beträge für das Beginnjahr und das Endejahr berechnen. */
select
Anfangsdatum,
Vertragsdauer,
BezahlterBetrag,
Monat,
StartJahr,
EndeJahr,
DauerStartJahr,
DauerEndeJahr,
BezahlterBetrag / 12 * DauerStartJahr as BetragStartJahr,
BezahlterBetrag / 12 * DauerEndeJahr as BetragEndeJahr
from (
/* Feststellen, wieviele Monate auf das Jahr des Vertragsbeginnes entfallen */
/* bzw. auf das Jahr des Vertragsendes. */
select
Anfangsdatum,
Vertragsdauer,
BezahlterBetrag,
Monat,
StartJahr,
EndeJahr,
min(Vertragsdauer,(12 - Monat + 1)) as DauerStartJahr,
12 - min(Vertragsdauer,(12 - Monat + 1)) as DauerEndeJahr
from (
/* Zuerst Monat und Jahr des Vertragsbeginnes bzw. Endes ermitteln. */
select
Anfangsdatum,
Vertragsdauer,
BezahlterBetrag,
month(Anfangsdatum) as Monat,
year(Anfangsdatum) as StartJahr,
year(Anfangsdatum) + 1 as EndeJahr
from testtabelle
/* Eventuell hier schon das Jahr per
SQL einschränken? */
/* where year(anfangsdatum) between :ParameterJahr - 1 and :ParameterJahr + 1 */
) a
) b
/* Auswahlmenge auf das gewünschte Jahr einschränken. */
where StartJahr = :ParameterJahr
or EndeJahr = :ParameterJahr
) c