case when in where-Bedingung?

Hallo zusammen,

ich steh grad etwas auf dem Schlauch.
Ich brauch ein Query das eine where-Bedingung nur beachtet, wenn ein bestimmtes Feld einen bestimmten Wert aufweist.

fiktive Bsp-Tabelle kunden:
kundennr, geschlecht, gebdat

Jetzt möchte ich in meiner Auswertung alle Frauen, und Männer ab 25. Mit einem union select wär das ja kein Problem… nur bin ich etwas Faul und will das eigentlich in einer Abfrage…

select kundennr, geschlecht, gebdat from kunden
where (case when geschlecht = 'm'  then extract(year from age(now(), gebdat)) > '24' end)

war ein kläglicher Versuch :sunglasses:

Am Start ist postgres 8.2.6 (leider Herstellergebunden…)

Danke + Gruss Toni



NOTICE:  CREATE TABLE will create implicit sequence "toni_id_seq" for serial column "toni.id"
CREATE TABLE
test=# copy toni (geschlecht, alter) from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> m    10
>> f    10
>> m    20
>> f    20
>> m    30
>> f    30
>> \.
test=# commit;
WARNING:  there is no transaction in progress
COMMIT
test=# select * from toni where (geschlecht='m' and alter > 20) or geschlecht = 'f';
 id | geschlecht | alter
----+------------+-------
  2 | f          |    10
  4 | f          |    20
  5 | m          |    30
  6 | f          |    30
(4 rows)

Andreas

Ahh… ich Depp.
Da war doch der Wald mit den vielen Bäumen…
Danke :slight_smile: