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=1FROM(SELECT NOW=GETDATE(),TODAY=CONVERT(date,GETDATE()),Y=YEAR(GETDATE()),M=MONTH(GETDATE())) SDT;
Die Zuordnung erfolgt dann über mehrfache Joins:
SELECTR.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)FROMRECHNUNGEN RLEFT 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.YTDLEFT JOIN @BY MTD ON R,DATUM>=MTD.MTD