ist es möglich, eine Unterabfrage innerhalb einer Fallklausel für die, wenn Anweisung
Ich denke, das ist das, was Sie fordern zu schreiben:
SELECT colA, colB,
CASE
WHEN EXISTS (SELECT * FROM tab2 WHERE tab2.colA = tab1.colA)
THEN '1'
WHEN EXISTS (SELECT * FROM tab3 WHERE tab3.colA = tab3.colA)
THEN '2'
ELSE '0'
END AS colC
FROM tab1;
Ist es möglich, etwas auf auf diesem Wert colum zu tun n?
Sie dies tun können, die colA verwendet anstatt COLC in der zweiten CASE
Ausdruck:
SELECT colA, colB,
CASE
WHEN EXISTS (SELECT * FROM tab2 WHERE tab2.colA = tab1.colA)
THEN '1'
WHEN EXISTS (SELECT * FROM tab3 WHERE tab3.colA = tab3.colA)
THEN '2'
ELSE '0'
END AS colC,
CASE
WHEN colA = '1' THEN (SELECT colA FROM tab2)
WHEN colA = '2' THEN (SELECT colB FROM tab3)
ELSE 'doesn''t work'
END AS colD
FROM tab1;
[Anmerkung Sie Gießen das Ergebnis des zweiten CASE
Ausdruck einer gemeinsamen vorsichtig sein müssten Datentyp, vermutlich VARCHAR
den ‚doesn''t Arbeit‘ Standardwert unter Berücksichtigung.]
aber ich denke, Sie, ob Sie fragen kann ‚Wiederverwendung‘ ist das Ergebnis eines CASE
Ausdrucks in den gleichen SELECT
-Klausel, in diesem Fall colC. Die Antwort darauf lautet nein, da der Korrelationsname nicht im Bereich ** liegt. Natürlich könnten Sie wickeln Sie es in einer Unterabfrage (oder CTE
, VIEW
, usw.):
SELECT DT1.colA, DT1.colB, DT1.colC,
CASE
WHEN DT1.colC = '1' THEN (SELECT colA FROM tab2)
WHEN DT1.colC = '2' THEN (SELECT colB FROM tab3)
ELSE 'doesn''t work'
END AS colD
FROM (
SELECT colA, colB,
CASE
WHEN EXISTS (SELECT * FROM tab2 WHERE tab2.colA = tab1.colA)
THEN '1'
WHEN EXISTS (SELECT * FROM tab3 WHERE tab3.colA = tab3.colA)
THEN '2'
ELSE '0'
END AS colC
FROM tab1
) AS DT1;
Hinweis
** Ich bin stützen mein Wissen über Standard-SQL statt db2. Mit MS Access können Sie beispielsweise Spaltenkorrelationsnamen in der gleichen SELECT
-Klausel von rechts nach links verwenden, was jedoch bestätigt, dass Access die SQL-Sprache nicht implementiert!
ist der obige Fall erlaubt mehrere und verschiedene Spalten zurück je nachdem, welcher Wert COLC ist
Verschiedene Spalten ja, mehrere Spalten nicht. Denken Sie darüber nach: Der Ausdruck CASE
gibt einen Wert zurück, also welcher Datentyp wäre ein Wert zwei Spalten? Tabelle, Liste, Array usw.? Skalare Werte sind eine Voraussetzung für 1NF.
Danke für den Vorschlag und die Erklärung. – Tyug