... WHERE (CASE WHEN ...)

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

seve
**
Beiträge: 38
Registriert: So, 13.01.2008 17:54

... WHERE (CASE WHEN ...)

Beitrag 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) 397 mal betrachtet
"testbedingung"
testbediungung.png
testbediungung.png (3.46 KiB) 392 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
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

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

Beitrag 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
Antworten