2009-08-10 4 views
1

사전에 사과드립니다. 아마도 내가 잊어 버린 것 같은 느낌이 들었습니다. 여기에 간다. 내 WHERE 절에 case 문을 사용하고, 아래는 잘 작동 :where 절에있는 case 문 OR OR

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol = 
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN 
@SomeVal 
    WHEN... 
... 
    ELSE 
@SomeVal 
END 

내 "문제는"이 같은 내 ELSE block..something에 추가 OR 절을 추가 할 것입니다 :

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol = 
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN 
@SomeVal 
    WHEN... 
... 
    ELSE 
@SomeVal OR @SomeVal - 1 
END 

당연히 다음과 같은 오류가 발생합니다. 'OR'키워드 근처의 구문이 잘못되었습니다. ELSE 문 내에서

내 질문 ... 이걸 달성 할 수있는 올바른/대체 논리는 무엇입니까?
미리 감사드립니다.

답변

1

CASE은 하나의 값을 반환하는 표현식입니다. 단일 CASE 익스프레션을 테스트하는 대신 두 개 사이의 OR을 수행 할 수 있습니다. 차이점은 else 절뿐입니다.

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol in 
    (CASE WHEN (@Year = 0 AND @Period = 0) THEN 
     @SomeVal 
     CASE WHEN... 
      ... 
     CASE ELSE 
     @SomeVal END, 
    CASE WHEN (@Year = 0 AND @Period = 0) THEN 
     @SomeVal 
     CASE WHEN... 
      ... 
     CASE ELSE 
     @SomeVal - 1 END) 

내 생각이 필요한 것보다 더 많은 논리가, 그리고 상황의 세부 사항을 알고 있다면 훨씬 더 간단하고 명확하게 다른 문이 될 수있다 : 당신이 할 수있는 (쓰기 SomeOtherCol = ... OR SomeOtherCol =에 대한 바로 가기로 IN 사용) 쓴.