Seite 1 von 1

... WHERE (CASE WHEN ...)

Verfasst: So, 29.03.2009 21:39
von seve
Hallo,
Ich hab wieder mal ein Problem mit meiner Adressdatenbank. Nachfolgend das Problem etwas vereinfacht.


Man habe folgende Tabellen:
"testdaten"
testdaten.png
testdaten.png (4.19 KiB) 398 mal betrachtet
"testbedingung"
testbediungung.png
testbediungung.png (3.46 KiB) 393 mal betrachtet


Nun möchte ich eine Abfrage auf die Tabelle "testdaten" machen, mit folgenden Bedingungen:
- Nur diejenigen Datensätze werden angezeigt, dessen "Nr" in "testbedingung" vorkommt.
- Wenn aber in "testbediungung" '0' oder kein Eintrag vorhanden ist, sollen alle Datensätze angezeigt werden.
(Ich hoffe, das Problem ist so verständlich geschildert)


Ich habs folgendermassen versucht, hat aber nicht funktionniert ("Unexpectet token in statement..."):

Code: Alles auswählen

SELECT DISTINCT * FROM "testdaten"
WHERE (
	CASE
	WHEN ( '0' IN ( SELECT "Nr" FROM "testbedingung" ))
	THEN ( "Nr" = "Nr" )
	ELSE ( "Nr" IN ( SELECT " Nr" FROM "testbedingung") )
)

Ich freue mich auf Korrekturen oder neue Ideen. Danke im Voraus!
DonZefe

Re: ... WHERE (CASE WHEN ...)

Verfasst: Mo, 30.03.2009 22:45
von Barlee
Hallo seve,

ich würde es in dieser Art lösen:

Code: Alles auswählen

SELECT * FROM "Testdaten" WHERE 

CASE WHEN
(SELECT COUNT("Erfüllt") AS ANZAHL FROM
(
SELECT "Nr", CASE WHEN ("Nr" = 0 OR "Nr" IS NULL) THEN 1 END AS "Erfüllt"
FROM "Testbedingung"
)) >= 1 
THEN "NR" LIKE ('%')
ELSE  "NR" IN (SELECT DISTINCT "Nr" FROM "Testbedingung")
END =1
Dabei prüft der folgende Teil, ob die Bedingung 0 oder "kein Eintrag" erfüllt ist:

Code: Alles auswählen

(SELECT COUNT("Erfüllt") AS ANZAHL FROM
(
SELECT "Nr", CASE WHEN ("Nr" = 0 OR "Nr" IS NULL) THEN 1 END AS "Erfüllt"
FROM "Testbedingung"
)) >= 1 
Enthalten die Testbedingungen einen DB-NULL Eintrag oder "0", dann wird in die Spalte "Erfüllt" eine 1 geschrieben. Ergibt die anschließende Zählung von Einträgen in dieser Spalte einen Wert von >=1, dann deutet es auf die erfüllte Bedingung hin.

Gruß Barlee