在Where子句中使用IF和else并使用IN(在where where field中)

时间:2012-09-25 06:50:19

标签: sql-server-2005

我想运行以下查询。运行时将提供@city

Select * from Emp
    where empno in (
        if( @city = 'Bangalore')
            Begin
                Select Empno from Emp
                    where EmpCity = @city
            End
        Else
            Begin
                Select empno from Emp
        End
    )

请提供替代方案帮助我

2 个答案:

答案 0 :(得分:1)

IF是控制流语句。您不能将语句放在其他语句中。

人们在提出IF时正常寻找的是CASE,这是一个表达式。但是,在这种情况下,更简单的查询似乎可行:

Select * from Emp
where
    (EmpCity = @city or @city != 'Bangalore') and
    (EmpSalary = @salary or @salary != 20000) and
    (Designation = @designation or @designation != 'PM')

我不明白为什么你有嵌套选择

答案 1 :(得分:1)

假设您的搜索基于EmpId - @EmpIdCity - @city

Select * 
from 
  Emp 
where 
 (@city  = '' or EmpCity = @city) and
 (@EmpId = '' or EmpId = @EmpId)