Zunächst wird eine Tabellenvariable deklariert und in diese die gewünschten Daten eingefügt. Hier:

  • aktuelles Geschäftsjahr Oktober bis September
  • vorheriges Geschäftsjahr
  • vorvorheriges Geschäftsjahr
  • letzter Jahreszeitraum
  • letzter Monatszeitraum

Ebenfalls ist ein Multiplikator enthalten.

DECLARE @BY table([BY.CURRENT] date,[BY.PREV] date,[BY.PREPREV] date,YTD date,MTD date,MUL INT);
INSERT INTO @BY([BY.CURRENT],[BY.PREV],[BY.PREPREV],YTD,MTD,MUL)
SELECT 
[BY.CURRENT]=DATEFROMPARTS(CASE WHEN SDT.M<9 THEN SDT.Y-1 ELSE SDT.Y END,10,1)
,[BY.PREV]=DATEFROMPARTS(CASE WHEN SDT.M<9 THEN SDT.Y-2 ELSE SDT.Y-1 END,10,1)
,[BY.PREPREV]=DATEFROMPARTS(CASE WHEN SDT.M<9 THEN SDT.Y-3 ELSE SDT.Y-2 END,10,1)
,YTD=DATEADD(year,-1,SDT.TODAY)
,MTD=DATEADD(month,-1,SDT.TODAY)
,MUL=1
FROM
(SELECT NOW=GETDATE(),TODAY=CONVERT(date,GETDATE()),Y=YEAR(GETDATE()),M=MONTH(GETDATE())) SDT;

Die Zuordnung erfolgt dann über mehrfache Joins:

SELECT
R.KUNDE
,[EUR.CBY]=SUM(CY.MUL * R.EUR)
,[EUR.PBY]=SUM(PY.MUL * R.EUR)
,[EUR.YTD]=SUM(YTD.MUL * R.EUR)
,[EUR.MTD]=SUM(MTD.MUL * R.EUR)
FROM
RECHNUNGEN R
LEFT JOIN @BY CY ON R.DATUM>=CY.[BY.CURRENT]
LEFT JOIN @BY PY ON R.DATUM>=PY.[BY.PREV] AND R.DATUM<CY.[BY.CURRENT]
LEFT JOIN @BY YTD ON R.DATUM>=YTD.YTD
LEFT JOIN @BY MTD ON R,DATUM>=MTD.MTD