CASE WHEN ohne ELSE

Hallo zusammen,

ich habe eine Abfrage mit CASE … WHEN … THEN … ELSE NULL END gebastelt. Postgres zeigt mir jetzt bei allen Einträgen in denen die WENN-Bedingung stimmt an, was ich hinter THEN geschrieben habe. Bei allen anderen zeigt es mir einen leeren Wert in der Zeile an.

Ich möchte aber, daß wenn die Bedingung hinter WHEN nicht zutrifft die Zeile gar nicht erst angezeigt wird und nicht einfach leer gelassen wird.

Ich hab ELSE NULL mal gelöscht, aber pgAdmin macht es dann automatisch wieder hin.

Gibt es irgendeine andere Lösung?

Danke.

die WHEN’s in die WHERE Klause aufnehmen ?

Symbiont hat recht, ein CASE … WHEN … brauchst du vermutlich gar nicht:

SELECT das_was_hinter_THEN_steht 
  FROM schema.tabelle 
  WHERE das_was_hinter_WHEN_steht;

Falls das nicht funktioniert, wäre die Angabe deiner Abfrage ganz sinnvoll.

CU
Fröstel

Danke schonmal, aber ich denke bei meiner Abfrage funktioniert das nicht so, oder?

SELECT en.id_entry, min(
CASE rd.id_merkmal
WHEN 136 THEN 137
WHEN 139 THEN 140
WHEN 229 THEN 227
WHEN 143 THEN 144
WHEN 141 THEN 142
WHEN 230 THEN 228
ELSE NULL
END) AS id_merkmal, avg(
CASE rd.id_merkmal
WHEN 136 THEN av.avg / ch.chk * 100
WHEN 139 THEN av.avg / ch.chk * 100
WHEN 229 THEN av.avg / ch.chk * 100
WHEN 143 THEN av.avg / ch.chk * 100
WHEN 141 THEN av.avg / ch.chk * 100
WHEN 230 THEN av.avg / ch.chk * 100
ELSE NULL
END) AS wert, count(
CASE rd.id_merkmal
WHEN 136 THEN rd.rd_wert
WHEN 139 THEN rd.rd_wert
WHEN 229 THEN rd.rd_wert
WHEN 143 THEN rd.rd_wert
WHEN 141 THEN rd.rd_wert
WHEN 230 THEN rd.rd_wert
ELSE NULL
END) AS anzahl
FROM …

Also mein Ziel ist aus von 6 Merkmalen einen Relativwert zu berechnen, diesen Relativwerten eine neue id_merkmal zuweisen und gleichzeitig zu zählen wie viele Einzelwerte in den Relativwert eingingen. Da ich noch andere Merkmale habe, zeigt er mir diese auch im Abfrageergebniss an, aber eben als leere Felder (wegen ELSE NULL) und das möchte ich nicht haben.

WHERE (CASE rd.id_merkmal
WHEN 136 THEN 137
WHEN 139 THEN 140
WHEN 229 THEN 227
WHEN 143 THEN 144
WHEN 141 THEN 142
WHEN 230 THEN 228
ELSE NULL
END) IS NOT NULL


oder einfacher
WHERE rd.id_merkmal IS NOT NULL
AND rd.id_merkmal <> …
AND rd.id_merkmal <> …

wenn du solche CASE WHENs formulierst kannst hier auch die tatsaechlichen Werte filtern …

Gruß

Hi, vielen vielen Dank! Das hat hingehauen.