where Klausel mit null oder value

ny_unity

SQL-Guru
Beiträge
208
Hallo zusammen,

ich habe ein statemant, welches ich gern mit der where klausel richtig bedienen möchte.

Aufbau:

SQL:
select     p.personalnr, trim(p.nachname) as nachname, trim(p.vorname) as vorname, round(sum(prod.stunden),2) as gesamtstunden, count(prod.stunden) + fz.fztage as tage, prod.arbzeitwch
from personal p
left join     (
        select aw.personalnr, k.kundennr, k.kundname, k.disponent, aw.stunden, aw.jahr, aw.monat, ep.arbzeitwch
        from einspers ep
        inner join auswlohn aw on aw.personalnr = ep.personalnr and aw.von >= date(extract(year from ep.datumvon) || '-' || extract(month from ep.datumvon) || '-01')
            and aw.bis <= date(extract(year from ep.datumvon) || '-' || extract(month from ep.datumvon) || '-01') + interval '1 month' - interval '1 day' and aw.einsortnr = ep.einsortnr
        inner join auftrag a on a.auftragnr = aw.auftragnr
        inner join kunden k on k.kundennr = a.kundennr
        where aw.lohnartnr = 101 and aw.verwendung = 'F'
        ) prod on p.personalnr = prod.personalnr
left join    (
        select fz.personalnr, sum((fz.datumbis::DATE - fz.datumvon::DATE) +1) as fztage, extract(year from fz.datumvon) as jahr, extract(month from fz.datumbis) as monat
        from einspers fz
        where fz.kb in ('FS', 'V')
        group by fz.personalnr, extract(year from fz.datumvon), extract(month from fz.datumbis)
        ) fz on fz.personalnr = p.personalnr
where     p.geschst = 1 and p.eintritt1 is not null and prod.jahr in (2023, null) and prod.monat in (7, null) and fz.jahr in (2023, null) and fz.monat in (7, null)
group by p.personalnr, trim(p.nachname), trim(p.vorname), fz.fztage, prod.arbzeitwch

prod.jahr und prod.monat können null sein oder einen wert, genauso fz.jahr und fz.monat. aber wenn ich das oben so eingebe, dann erhalte ich nur datensätze, wo alle 4 spalten einen wert haben, aber nicht nur zwei (wenn fz.jahr gefüllt ist, ist es auch fz.monat, genau so ist es bei prod.jahr und prod.monat), aber er zeigt mir nicht die datensätze an, wo prod jahr und monat gefüllt sind, aber fz.jahr und monat leer ist.

Hab ich einen Fehler drin?
 
Werbung:
IN funktioniert nicht mit NULL. Du musst das so machen:

Code:
and (prod.jahr in (2023) or prod.jahr is null)

Alternativ mit einem coalesce und einem Wert den es nicht geben sollte

Code:
and coalesce(prod.jahr,-1) in (2023,-1)
 
Werbung:
Zurück
Oben