... WHERE (CASE WHEN ...)

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: ... WHERE (CASE WHEN ...)

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

von Barlee » Mo, 30.03.2009 22:45

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

... WHERE (CASE WHEN ...)

von seve » So, 29.03.2009 21:39

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) 399 mal betrachtet
"testbedingung"
testbediungung.png
testbediungung.png (3.46 KiB) 394 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

Nach oben