Ergebnis 1 bis 3 von 3

Thema: case when in where-Bedingung?

  1. #1
    toni_83 ist offline Benutzer
    Registriert seit
    08.07.2008
    Beiträge
    42

    Standard 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....

    Code:
    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

    Am Start ist postgres 8.2.6 (leider Herstellergebunden....)

    Danke + Gruss Toni
    wer bis zum hals in der scheisse steckt, der sollte den kopf nicht hängen lassen

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von toni_83 Beitrag anzeigen
    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....

    Code:
    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

    Am Start ist postgres 8.2.6 (leider Herstellergebunden....)

    Danke + Gruss Toni
    Code:
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    toni_83 ist offline Benutzer
    Registriert seit
    08.07.2008
    Beiträge
    42

    Standard

    Ahh... ich Depp.
    Da war doch der Wald mit den vielen Bäumen....
    Danke
    wer bis zum hals in der scheisse steckt, der sollte den kopf nicht hängen lassen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum