2009-11-17 4 views
14

Ich möchte * auswählen und muss nicht alle einzelnen Spalten eingeben, sondern auch eine benutzerdefinierte Spalte mit einer case-Anweisung. Ich habe versucht, die folgenden:Wie wählen Sie alle Spalten und das Ergebnis einer CASE-Anweisung in Oracle 11g aus?

select *, (case when PRI_VAL = 1 then 'High' 
       when PRI_VAL = 2 then 'Med' 
       when PRI_VAL = 3 then 'Low' 
      end) as PRIORITY 
from MYTABLE; 

Aber es beschwert sich, dass

ORA-00923: FROM keyword not found where expected 

Antwort

28

einen Alias ​​für Mytable wie folgt hinzufügen:

select t.*, (case when PRI_VAL = 1 then 'High' 
       when PRI_VAL = 2 then 'Med' 
       when PRI_VAL = 3 then 'Low' 
      end) as PRIORITY 
from MYTABLE t; 

Dieses auf eine bestimmte Oracle-Version nicht abhängig ist, nicht sicher über andere Datenbanken.

+0

Dank! Okay ich schätze ich habe mein Problem zu stark vereinfacht. Was ist, wenn die Spalten das Ergebnis einer Verknüpfung sind, d. H. SELECT ... FROM MYTABLE M VERBINDEN SIE EINE ANDERE AUF M.ID = A.ID? –

+0

Nevermind, ich habe gerade die Antwort auf diese Frage gefunden. Es ist wählen M. *, A. *, (Fall ... Danke nochmal! –

5

Wie IronGoofy sagt, fügen Sie den Tabellenalias hinzu.

Auf einer anderen Notiz darüber im Klaren sein, dass es eine praktische Fall Syntax gesucht, die für Ihre Situation geeignet wäre:

select t.*, 
     case PRI_VAL 
     when 1 then 'High' 
     when 2 then 'Med' 
     when 3 then 'Low' 
     end as PRIORITY 
from MYTABLE t; 
-2

es wie folgt tun:

select e.*, 
case deptno 
when 30 then 'High' 
when 20 then 'Medi' 
when 10 then 'Low' 
else 'Very Low' 
end case 
from emp e order by deptno desc; 
Verwandte Themen