2017-11-24 17 views
1

다음 코드를 사용하여 SQL Server 2014의 Where 절에 여러 조건을 추가하려고하는데 구문 오류가 발생합니다.where 절의 IIF 문 사용

사례 문을 시도했지만이 사이트의 예제를 기반으로 작동하지 않습니다.

Where 
iif(ss.DATAAREAID = 'USMF', 
(ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID not like 'SMS%'), 
(ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID like 'SS%') 

나는 이것이 빠른 해결책이라고 확신하지만, 어떤 도움을 주시면 감사하겠습니다.

+0

@ LasseVågsætherKarlsen - https://docs.microsoft.com/en-us/sql/t-sql/functions/logical-functions-iif-transact-sql –

+0

내 SQL Server 지식을 분명히 업데이트해야합니다. . –

답변

5

조건부 논리를 사용하지 마십시오. 그냥 부울 표현식을 사용

Where (ss.DATAAREAID = 'USMF', and ss.ITEMGROUPID like 'S%' and ss.ITEMGROUPID not like 'SMS%') or 
     (ss.DATAAREAID <> 'USMF' and ss.ITEMGROUPID like 'SW%' and ss.ITEMGROUPID like 'SS%') 

참고 : iif()는 SQL 서버 기능이지만,이 MS 액세스에 대한 이전 버전과의 호환성을 위해 도입되었다. 대신 ANSI 표준 case 표현식을 사용해야합니다.

SQL Server가 부울 식의 결과를 유효한 값으로 처리하지 않기 때문에 버전이 작동하지 않습니다. 다음과 같이해야합니다.

where (case when . . . and . . . then 1 
      else 0 
     end) = 1 

위의 값은 NULL 값을 고려하지 않습니다. 이 조건은 필요한 경우 쉽게 추가 할 수 있습니다.

+0

잘 해줘서 고마워. 내 게시물에 답한 모든 사람에게 감사드립니다. – Juni0R