2013-08-27 69 views
2

是否有可能實現我在下面的SQL查詢中要做的事情? 我想檢查項目名稱是否與給定列表中的任何項目匹配。是否有可能在Oracle SQL中使用CASE和ANY()?

select 
    case item_name 
    when any ('PEN', 'PENCIL', 'PAPER', 'ERASER') then 'STATIONARY' 
    else 'OTHER' 
    end is_stationary 
from items; 

我試過這個查詢,似乎是不可能的。錯誤消息是,

ORA-00936: missing expression 
00936. 00000 - "missing expression" 
*Cause:  
*Action: 
Error at Line: 29 Column: 10 

是否有任何其他解決方法來實現此目的?

回答

6

試試這個

select 
    case when item_name IN ('PEN', 'PENCIL', 'PAPER', 'ERASER') then 'STATIONARY' 
    else 'OTHER' 
    end is_stationary 
from items; 

CASE .. IN .. REFERENCE LINK

+0

它不起作用。這次缺少關鍵字錯誤。 ('ORA-00905:缺少關鍵字') – Shaakunthala

+0

這應該工作。必須有其他的東西導致這個錯誤。 – dnoeth

+0

對不起,我的錯。我錯過了當時的STATIONARY部分。它工作得很好。謝謝! – Shaakunthala

3

@ BVR的回答是目前解決這一問題的最常見的方式。但看起來您已經非常接近正確使用替代語法 group comparison condition

select 
    case 
    when item_name = any ('PEN', 'PENCIL', 'PAPER', 'ERASER') then 'STATIONARY' 
    else 'OTHER' 
    end is_stationary 
from items; 
相關問題