30

我想选择 *,而不必输入所有单独的列,但我还想包含一个带有 case 语句的自定义列。我尝试了以下方法:

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;

但它抱怨说

ORA-00923: FROM keyword not found where expected
4

3 回答 3

51

像这样为 mytable 添加别名:

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;

这不依赖于任何特定的 Oracle 版本,不确定其他数据库。

于 2009-11-17T21:19:52.820 回答
8

正如 IronGoofy 所说,添加表别名。

另请注意,有一个方便的搜索案例语法适合您的情况:

select t.*,
       case PRI_VAL
         when 1 then 'High' 
         when 2 then 'Med' 
         when 3 then 'Low' 
       end as PRIORITY 
from MYTABLE t; 
于 2009-11-18T10:13:06.507 回答
-3

像这样做:

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;
于 2016-03-14T14:23:52.737 回答