2013-08-27 1 views
2

아래의 SQL 쿼리에서 수행하려는 작업을 수행 할 수 있습니까? 항목 이름이 지정된 목록과 일치하는지 확인하고 싶습니다.CASE와 ANY()를 Oracle SQL에서 사용할 수 있습니까?

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 : missing keyword') – Shaakunthala

+0

이것이 작동 할 것입니다. 이 오류가 발생하는 다른 것이 있어야합니다. – dnoeth

+0

죄송합니다, 실수. 나는 그때 '정지'부분을 놓쳤다. 완벽하게 잘 작동합니다. 감사! – 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;