Sicht erstellen Fehler (Mit IF Anweisung)

dbmaxi

Neuer Benutzer
Beiträge
1
Guten Tag ,

Ich benutze folgende Abfrage :

IF DATEPART(month, GETDATE()) = 12
BEGIN
SELECT TOP (100) PERCENT dbo.Umsatzplan.Rechnungsdatum, dbo.Angebot.Notiz, dbo.Umsatzplan.Summe, dbo.Mitarbeiter.Name
FROM dbo.Projekte INNER JOIN
dbo.Umsatzplan ON dbo.Projekte.Code = dbo.Umsatzplan.Projektcode INNER JOIN
dbo.Mitarbeiter ON dbo.Projekte.BenutzerCode = dbo.Mitarbeiter.Code RIGHT OUTER JOIN
dbo.Angebot ON dbo.Umsatzplan.BZObjMemberCode = dbo.Angebot.Code
WHERE (MONTH(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(month, GETDATE())-11) AND (YEAR(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(YEAR, GETDATE())+1) AND (dbo.Umsatzplan.Verrechnet = 0)
ORDER BY dbo.Umsatzplan.Rechnungsdatum DESC
END
ELSE
BEGIN
SELECT TOP (100) PERCENT dbo.Umsatzplan.Rechnungsdatum, dbo.Angebot.Notiz, dbo.Umsatzplan.Summe, dbo.Mitarbeiter.Name
FROM dbo.Projekte INNER JOIN
dbo.Umsatzplan ON dbo.Projekte.Code = dbo.Umsatzplan.Projektcode INNER JOIN
dbo.Mitarbeiter ON dbo.Projekte.BenutzerCode = dbo.Mitarbeiter.Code RIGHT OUTER JOIN
dbo.Angebot ON dbo.Umsatzplan.BZObjMemberCode = dbo.Angebot.Code
WHERE (MONTH(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(month, GETDATE())+1) AND (YEAR(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(YEAR, GETDATE())) AND (dbo.Umsatzplan.Verrechnet = 0)
ORDER BY dbo.Umsatzplan.Rechnungsdatum DESC
END

Ich bekomme zwar Datensätze raus allerdings kann ich diese Abfrage nicht als Sicht speichern.
Folgender Fehler tritt auf :
Falsche Syntax in der Nähe des 'IF' - Schlüsselwortes.

Danach öffnet sich noch ein Fenster mit folgender Fehlermeldung :
Vorgang durch Benutzer im Dialog "Speichern" abgebrochen.
(MS Visual Database Tools)

Kann mir jemand die Abfrage evtl in Case umschreiben ?
Vll funktioniert es ja dann :confused:

Mfg dbmaxi
 
Werbung:
Wozu CASE?
Code:
SELECT TOP (100) PERCENT dbo.Umsatzplan.Rechnungsdatum, dbo.Angebot.Notiz, dbo.Umsatzplan.Summe, dbo.Mitarbeiter.Name
FROM dbo.Projekte INNER JOIN
dbo.Umsatzplan ON dbo.Projekte.Code = dbo.Umsatzplan.Projektcode INNER JOIN
dbo.Mitarbeiter ON dbo.Projekte.BenutzerCode = dbo.Mitarbeiter.Code RIGHT OUTER JOIN
dbo.Angebot ON dbo.Umsatzplan.BZObjMemberCode = dbo.Angebot.Code
WHERE    dbo.Umsatzplan.Verrechnet = 0
AND    (    DATEPART(month, GETDATE()) = 12
AND        MONTH(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(month, GETDATE()) + 1
AND        YEAR(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(YEAR, GETDATE())
OR        DATEPART(month, GETDATE()) != 12
AND        MONTH(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(month, GETDATE()) - 11
AND        YEAR(dbo.Umsatzplan.Rechnungsdatum) = DATEPART(YEAR, GETDATE()) + 1 )
ORDER BY dbo.Umsatzplan.Rechnungsdatum DESC
Oder eleganter wie ich finde:
Code:
SELECT TOP (100) PERCENT dbo.Umsatzplan.Rechnungsdatum, dbo.Angebot.Notiz, dbo.Umsatzplan.Summe, dbo.Mitarbeiter.Name
FROM dbo.Projekte INNER JOIN
dbo.Umsatzplan ON dbo.Projekte.Code = dbo.Umsatzplan.Projektcode INNER JOIN
dbo.Mitarbeiter ON dbo.Projekte.BenutzerCode = dbo.Mitarbeiter.Code RIGHT OUTER JOIN
dbo.Angebot ON dbo.Umsatzplan.BZObjMemberCode = dbo.Angebot.Code
WHERE    dbo.Umsatzplan.Verrechnet = 0
AND        dbo.Umsatzplan.Rechnungsdatum BETWEEN DATEADD(mm,DATEDIFF(m,0,GETDATE())+1,0) AND DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,GETDATE())+2,0))
ORDER BY dbo.Umsatzplan.Rechnungsdatum DESC
 
Zurück
Oben