Hier wäre jetzt meine erste Lösungsumsetzung, allerdings werden noch keine Arbeitstage berücksichtigt, sondern nur Tage.
Hinweis:
Diese CASTs setzen den jeweiligen Datumseintrag auf den letzten Tag des Vormonats, es sind aber auch andere Varianten möglich.
USE datenbank;
IF DATEPART(day, GETDATE()) > 3
BEGIN
IF DATEPART(day, GETDATE()) > 7
BEGIN
UPDATE dbo.uebersicht
SET tmp_date =
(CAST(SUBSTRING(CAST((DATEADD(m,0,GETDATE())-DAY(GETDATE()))
AS BINARY(8)),1,4) + 0x00000000 AS DATETIME))
WHERE Abteilung = 'Abteilung1';
END
ELSE
BEGIN
UPDATE dbo.uebersicht
SET tmp_date =
(CAST(SUBSTRING(CAST((DATEADD(m,0,GETDATE())-DAY(GETDATE()))
AS BINARY(8)),1,4) + 0x00000000 AS DATETIME))
WHERE Abteilung = 'Abteilung2';
END
END
ELSE
...
Jetzt fehlt "nur" noch der kompliziertere Teil mit den Arbeitstagen.