2009-07-16 6 views
0

Hy Jungs zu ersetzen,Mit einer Oracle subselect eine CASE-Anweisung

kann mir jemand bitte helfen Sie mit einer Unterabfrage in Oracle-Datenbank 10g? Ich muss die Werte für eine Spalte in der ersten Tabelle als Wert einer anderen Spalte in der zweiten Tabelle extrahieren. Ich verwende derzeit diese Aussage:

SELECT 
CASE WHEN A.column1 = 'A' THEN 'aaa' 
WHEN A.column1 = 'B' THEN 'bbb' 
....... 
WHEN A.column1 = 'X' THEN 'xxx' 
ELSE 'bad' END AS COLUMN1, A.* 
FROM TRANSACTION_TABLE A, CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 <> ' ' 

Dies ist nicht ein eleganter Ansatz, so versuche ich, ein subselect von CATEGORY_TABLE B wie folgt zu verwenden: So

SELECT A.column1, A.* 
FROM TRANSACTION_TABLE A, CATEGORY_TABLE B 
WHERE A.column1 IS NOT NULL 
AND A.column1 = B.column_b_1 
AND A.column1 <> ' ' 
AND A.column1 IN (SELECT B.column_b_1_descr FROM CATEGORY_TABLE B 
WHERE B.FIELDNAME = 'column1' AND A.column1 = B.column_b_1) 

, ich kann nicht bekommen Wenn Sie die Unterabfrage verwenden und CASE nicht für viele Bedingungen weiter verwenden möchten, müssen Sie nur die A.column1-Werte durch die deskriptiven Werte von B.column_b_1_descr ersetzen, da diese einfacher zu lesen sind. Ich würde mich über Feedback freuen. Dank

+0

Um zu verdeutlichen, wollen Sie die Zeichenfolge 'aaa' für das Feld 'column1' in der Ausgabezeile, wenn Spalte1 'A' ist, nicht der Wert in der Spalte * genannt * 'aaa', richtig? –

Antwort

1

Wenn ich Ihre Frage bin Missverständnis ...

CATEGORY_TABLE: 
    name | value 
    A  aaa 
    B  bbb 
    C  ccc 
... 


SELECT B.value AS COLUMN1, A.\* 
FROM TRANSACTION\_TABLE A, CATEGORY\_TABLE B 
WHERE A.column1 = B.name 

oder

SELECT t2.value as COLUMN1, t1.\* 
FROM TRANSACTION\_TABLE t1 
INNER JOIN CATEGORY\_TABLE t2 ON t1.column1 = t2.name; 

Die where-Klausel ist nicht erforderlich, da eine innere Verknüpfung automatisch Zeilen mit Nullwerten ausschließt oder keine Treffer.

+2

Wenn Sie "schlechte" Werte behalten möchten, verwandeln Sie dies in einen OUTER JOIN und ändern Sie den ersten Teil von SELECT in "SELECT Coalesce (t2.value, 'bad') als COLUMN1, ... –

Verwandte Themen