Case when ... ist ein Or möglich ?

Dukeatcoding

Mitglied
MySQL: Case when ... ist ein Or möglich ?

Bei einer Case When Bedingung innerhalb einer Anwendung kann man ja mit mehreren When's Alternativen mache, da ich aber möchte das bei 3 verschiedenen zuständen immer das gleiche Then genommen wird hab ich die Ausdrücke versucht mit einem or zu verknüpfen.

Bei nur einer Case When in der SQL Anfrage klappt es... habe ich dann eine 2 sowie im beispiel siehe unten geht es nicht.

Ich bin mir gerade etwas unsicher ob man generell überhaupt nen OR benutzten darf:

PHP:
Select DISTINCT 
mitarbeiter.*,
mitarbeiter_zeiten.*,
mitarbeiter_zeiten.gehalt as gehalt,
kostenstellen.name as kostenstelle,
mitarbeiter_kostenstellen.prozent as prozent,

CASE WHEN (vonmonat <= '1' and vonjahr='2008' and bisjahr = '2008' and bismonat>= '1') 
or (vonjahr < '2008' and bisjahr='2008' and bismonat >= '1') 
or (vonmonat <= '1' and vonjahr = '2008'  and bisjahr>'2008') and  THEN gehalt * prozent / 100 ELSE '0' END AS januar,

CASE WHEN (vonmonat <= '2' and vonjahr='2008' and bisjahr = '2008' and bismonat>= '2')
or (vonjahr < '2008' and bisjahr='2008' and bismonat >= '2') 
or (vonmonat <= '2' and vonjahr = '2008'  and bisjahr>'2008')THEN gehalt * prozent / 100 ELSE '0' END AS februar
from mitarbeiter,mitarbeiter_zeiten,mitarbeiter_kostenstellen,kostenstellen
where 
mitarbeiter_zeiten.mid=mitarbeiter.id 
and (vonjahr<='2008' and bisjahr>='2008') 
and mitarbeiter_zeiten.id = mitarbeiter_kostenstellen.bid 
and mitarbeiter_kostenstellen.kid ='7' 
and kostenstellen.id = '7' 

order by name ASC, vorname ASC
 
Zuletzt bearbeitet:
Durch vernünftiges Klammern ist ein or möglich

PHP:
Select DISTINCT 
mitarbeiter.*,
mitarbeiter_zeiten.*,
mitarbeiter_zeiten.gehalt as gehalt,
kostenstellen.name as kostenstelle,
mitarbeiter_kostenstellen.prozent as prozent,

CASE WHEN ((vonmonat <= 1 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 1)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 1)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS januar, 

CASE WHEN ((vonmonat <= 2 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 2)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 2)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS februar, 

CASE WHEN ((vonmonat <= 3 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 3)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 3)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS mrz,

CASE WHEN ((vonmonat <= 4 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 4)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 4)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS april, 

CASE WHEN ((vonmonat <= 5 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 5)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 5)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS mai,

CASE WHEN ((vonmonat <= 6 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 6)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 6)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS juni, 

CASE WHEN ((vonmonat <= 7 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 7)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 7)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS juli,

CASE WHEN ((vonmonat <= 8 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 8)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 8)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS august, 

CASE WHEN ((vonmonat <= 9 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 9)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 9)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS september,

CASE WHEN ((vonmonat <= 10 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 10)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 10)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS oktober,

CASE WHEN ((vonmonat <= 11 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 11)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 11)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS november,

CASE WHEN ((vonmonat <= 12 and vonjahr=2008 and ((bisjahr = 2008 and bismonat>= 12)or(bisjahr>2008))) 
or (vonjahr < 2008 and ((bisjahr=2008 and bismonat >= 12)or (bisjahr>2008)))) 
THEN gehalt * prozent / 100 ELSE '0' END AS dezember 

from mitarbeiter,mitarbeiter_zeiten,mitarbeiter_kostenstellen,kostenstellen
where 
mitarbeiter_zeiten.mid=mitarbeiter.id 
and (vonjahr<='2008' and bisjahr>='2008') 
and mitarbeiter_zeiten.id = mitarbeiter_kostenstellen.bid 
and mitarbeiter_kostenstellen.kid ='7' 
and kostenstellen.id = '7' 

order by name ASC, vorname ASC
 
Zurück