Zur Beachtung - Programme & Quellcodes

Für die bereitgestellten Programme und Quellen gilt unser Copyright oder, falls explizit andere Regelungen angegeben sind, diese.

Wir raten in jedem Fall dazu, vorab ein Backup in einem Umfang zu erstellen, der die Wiederherstellung der Systeme im Fehlerfall sichert. Dies betrifft bei Active-Directory-integrierten Diensten auch das Active-Directory.

 

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