2011-03-02 7 views
2

나는 다음과 같은 SQL 문이 있습니다Where If 절 (또는 Case) 문으로 SQL 절?

SELECT 
    WORKORDER.WONUM, 
    WORKORDER.WO3, 
    WORKORDER.DESCRIPTION WO_DESC, 
    WORKORDER.WORKTYPE, 
    WORKORDER.STATUS, 
    WORKORDER.WOPRIORITY, 
    (case when WORKORDER.CUSTREQ1=1 then 'Yes' else 'No' end) WO18, 
    WORKORDER.REPORTDATE, 
    WORKORDER.ACTFINISH, 
    (WORKORDER.LOCATION + ' ' +LOCATIONS.DESCRIPTION) LOC_DESC 
FROM WORKORDER 
    LEFT OUTER JOIN LOCATIONS ON WORKORDER.LOCATION = LOCATIONS.LOCATION 
WHERE 
    WORKORDER.HISTORYFLAG = 0 
    AND WORKORDER.ISTASK = 0 
    AND WORKORDER.STATUS = 'COMP' 
    AND WORKORDER.STATUSDATE >= getdate() - 1 
    AND WORKORDER.LOCATION LIKE 'ABC%' 

내가 (아마도 WHERE 절에) 추가 조건을 추가 할 다음 동작이 가능합니다 :
를 - workorder의 WORKTYPE는 'PM'의 경우와 WOPRIORITY는 5입니다. 포함시키지 마십시오!
- 작업 순서 WORKTYPE이 다른 경우 우선 순위를 허용하십시오.

WHERE 절에 넣을 IF 또는 CASE 문 유형을 정확하게 지정하지 않으면 우선 순위 오후 5시를 구체적으로 제한 할 수 있습니다. 모든 도움이 크게 감사드립니다! 미리 감사드립니다!


해결책을 찾았을지 모릅니다.

WHERE NOT (WorkType = 'PM' AND WOPRIORITY = 5) 

답변

2

난 당신이 너무 열심히 이것에 대해 생각하는 것 같아요 : 저는 WHERE 절에 다음과 같은 줄을 추가 한

... AND 1 = CASE WHEN WORKTYPE='PM' AND WOPRIORITY=5 THEN 0 ELSE 1 END ... 

이 경우에는 왜 더 단순한 논리를 사용하지 않는지 알지 못합니다. 일반적으로 CASE 구조는 일반적인 부울 표현식에서 SQL의 유순 한 평가 순서를 벗어나는 데 적합합니다. null 속성에 대한 테스트를 피하는 것이 좋으며 부울 평가 순서가 잘 정의되어 있지 않으므로 CASE를 사용하여 한정된 순서의 연산을 도입하십시오.

+0

덕분에 빠른 응답을! 당신 말이 맞았습니다! 나는 그것을 overthinking했다! (여기에 내 글을 쓰면 실제로 그 점을 깨달을 수있었습니다!) –

+0

가장 빠른 답변을 한 이후 답변에 대한 크레딧을 얻었습니다 !! 다시 한 번 감사드립니다! –

0

보통 내가 같은 것을 할 ...

AND (case when WORKORDER.WORKTYPE='PM' then WORKORDER.WOPRIORITY<>5) 
2

WHERE NOT (WORKTYPE = 'PM' AND WOPRIORITY = 5)가 문제를 해결하지 않습니까?

+0

빠른 답장을 보내 주셔서 감사합니다! 나는 그것을 작동하게했다! –

2

당신은 당신의 where 절에이 줄을 추가 할 수 있습니다

AND NOT (WORKORDER.WORKTYPE = 'PM' AND WORKORDER.WOPRIORITY = 5) 
+0

빠른 답장을 보내 주셔서 감사합니다! 이제 알겠습니다! –