2017-06-02 3 views
1

Ich brauche eine CASE-Anweisung, um eine Liste von Strings zurückzugeben, aber ich habe einige Syntaxprobleme. Das resultierende SQL sollte wie folgt sein: zu tunPL/SQL gibt eine Liste in einer CASE-Anweisung zurück

SELECT * FROM FRUIT WHERE COLOR IN ('RED', 'YELLOW') 

Was ich versuche (das funktioniert nicht):

SELECT * FROM FRUIT WHERE COLOR IN 
CASE 
    WHEN TYPE = *something* 
    THEN ('RED', 'YELLOW') 
    ELSE ('GREEN') 
END 

Dies funktioniert:

SELECT * FROM FRUIT WHERE COLOR IN 
CASE 
    WHEN TYPE = 1 
    THEN 'RED' 
    ELSE 'GREEN' 
END 

Der Fehler Ich bekomme:

ORA-00907 missing right parenthesis 

Es funktioniert, wenn ich verwende mehrere COLOR = 'X' ODER COLOR = 'Y', aber ich frage mich, ob es eine Möglichkeit gibt, nur eine CASE-Anweisung dafür zu verwenden. Danke im Voraus.

+0

einfach anstelle der Booleschen Logik. Kein Vorteil bei der Verwendung eines Case-Ausdrucks. –

+0

Warum verwenden Sie keine Gewerkschaften? Wenn Sie von einer Tabelle abfragen müssen, aber mit dem Fall wo Klauseln - Gewerkschaften ist am häufigsten Weg zu gehen. – Ychdziu

+0

Was ist Ihre erwartete Ausgabe? – maSTAShuFu

Antwort

5

Eine Case Anweisung kann nur einen Wert zurückgeben. Ich glaube, Sie brauchen nicht CASE Anweisung können Sie IN Betrieb anstelle von Case, wie diese

SELECT * 
FROM FRUIT 
WHERE TYPE = 'something' AND COLOR IN ('RED', 'YELLOW') 
OR TYPE <> 'something' AND COLOR IN ('GREEN') 
+0

Oh, ich verstehe. Ich werde diesen Ansatz verwenden. Danke, ich werde deine Antwort akzeptieren. – somagrave

Verwandte Themen