2017-10-13 2 views
1

SQL Server에서이 사례 문을 어떻게 사용할 수 있습니까?WHERE 절에 추가 할 CASE 문?

declare @isnot tinyint 
select @isnot = 1 

select top 100 * 
from Employee 
where EmployeeID > 1 
    and case 
     when @isnot = 1 
      then (EmployeeName = 'Brian') 
      else (EmployeeName = 'Anie') 
end 

이 쿼리는 어떻게됩니까?

declare @isnot tinyint 
select @isnot = 1 -- option : 0 and 1 

select top 100 * 
     from Employee 
     where EmployeeID > 1 
     case 
      when @isnot = 1 
      then (and EmployeeName = 'Brian') 
      else '' -- blank 
    end 

하위 쿼리 등을 사용하고 싶지 않습니다. 당신이 값 진 수표를 사용하고 있기 때문에

+0

끝 부분에'END'가 누락되었습니다 ...'CASE' 문을'END'로 끝내야합니다. –

+0

@ Aominè 내 where 문에 대소 문자를 추가하여 자동으로 추가합니다. Employee = ' Bran 'or Employee ='Anie ' – Richard

+0

WHERE 절과 ON 절에서 대소 문자를 구분하는 대신'AND' /'OR '를 사용하는 것이 일반적으로 훨씬 낫습니다. – jarlh

답변

2
declare @isnot tinyint 
select @isnot = 1 

SELECT top 100 * 
FROM Employee 
WHERE 
EmployeeID > 1 AND 
EmployeeName = 
      CASE @isnot 
      WHEN 1 
      THEN 'Brian' 
      ELSE 'Anie' 
      END 
+0

답해 주셔서 고맙습니다.하지만이 스레드의 실제 질문은 두 번째 질문에 있습니다. – Richard

+0

(@isnot = 1 AND EmployeeName = 'Brian') 또는 @isnot <> 1 –

0

당신은 또한 짧은 구문하게 IIF을 사용할 수 있습니다 (코드는 값 1 또는 1이 아닌에 대한 관심). 그래서 ...

DECLARE @isnot tinyint = 1 

SELECT TOP 100 * 
FROM Employee 
WHERE EmployeeID > 1 AND 
EmployeeName = IIF(@isnot = 1, 'Brian', 'Anie') 
0

구문을 사용하면 CASE 문을 완료 END 필요,이 열쇠이며, 또한 EmployeeName는 AND를 시작합니다

이든

SELECT TOP 100 * FROM Employee WHERE EmployeeID > 1 
AND EmployeeName = CASE WHEN @isnot = 1 THEN 'Brian' ELSE 'Anie' END 

또는

SELECT TOP 100 * FROM Employee WHERE EmployeeID > 1 
AND EmployeeName = CASE WHEN @isnot = 1 THEN 'Brian' ELSE '' END 
0

사례 명세서 없음

WHERE EmployeeID > 1 
    AND (EmployeeName == 'Brian' AND @isnot = 1 
     OR EmployeeName == 'Anie')