Access-o-Mania

Datenbanken => MS SQL-Server => Thema gestartet von: Xoar am September 01, 2021, 14:33:50

Titel: CASE / IF
Beitrag von: Xoar am September 01, 2021, 14:33:50
Hallo,

ich fummel hier jetzt seit ner guten Stunde rum und bekomme es im T-SQL einfach nicht geschafft eine simple CASE Abfrage zu machen.

Ich möchte analog zu dieser VBA Variante das in T-SQL machen.
if isNull([bis]) then
   Monate = datedif("m", [von], date())
else
   Monate = datedif("m", [von], [bis])
end if

Was ich z.B. probiert habe war sowas:
declare @monate AS int
SELECT MitarbeiterID_F,
   case
       when bis is null
           then @monate = DATEDIFF(m, [von], getdate())
       when bis not is null
           then  @monate = DATEDIFF(m, [von], [bis])
       end
  FROM [Personaldaten].[dbo].[tblZugehoerigkeiten]

Monate soll ein berechnetes Feld sein.

Könnt ihr mir da mal auf die Sprünge helfen? Wo mache ich was und warum falsch -.-

Danke!
Titel: Re: CASE / IF
Beitrag von: PhilS am September 02, 2021, 12:14:02
Zitat von: Xoar am September 01, 2021, 14:33:50declare @monate AS int
SELECT MitarbeiterID_F,
   case
       when bis is null
           then @monate = DATEDIFF(m, [von], getdate())
       when bis not is null
           then  @monate = DATEDIFF(m, [von], [bis])
       end
  FROM [Personaldaten].[dbo].[tblZugehoerigkeiten]

Monate soll ein berechnetes Feld sein.
Monate soll einfach eine berechnete Spalte in der ausgegebenen Ergebnismenge sein?
Dann lass die Variable einfach weg.
SELECT MitarbeiterID_F,
   case
       when bis is null
           then DATEDIFF(m, [von], getdate())
       when bis not is null
           then DATEDIFF(m, [von], [bis])
       end AS Monate
  FROM [Personaldaten].[dbo].[tblZugehoerigkeiten]

Titel: Re: CASE / IF
Beitrag von: Xoar am September 02, 2021, 13:51:57
@PhilS

Danke so klappt es, musste noch ein paar Kleinigkeiten ändern, aber dann gehts :)

not is null in is not null
Tabellenzuordnung vor dem Feld.

SELECT MitarbeiterID_F,
   case
       when tblZugehoerigkeiten.bis is null
           then DATEDIFF(m, [von], getdate())
       when tblZugehoerigkeiten.bis is not null
           then DATEDIFF(m, [von], [bis])
       end AS Monate
  FROM [Personaldaten].[dbo].[tblZugehoerigkeiten]