将两个select语句合并为一个;我无法弄清楚怎么做......虽然看起来很容易

时间:2014-03-24 05:01:38

标签: sql sql-server-2008 tsql

这是一个有趣的挑战。

我有一个带有这样的select语句的sp:

  

从员工

中选择*

我想要的是用户可以使用或不使用employee type参数调用此存储过程。 假设一个例子,员工类型允许'内部'外部'只有价值。这是一个可选参数。

我们想要调用此SP,sp应该只用一个select语句执行

所以我想:

select * from employee 

or 

select * from employee where employeetype in ('Internal')

我想把它合二为一。

我不想使用If Statement。

如果未提供EmployeeType,则应返回整个员工列表。

请注意,我可以在变量中包含多个员工类型,因此它必须类似于

@employeeType ='内部,外部,主管' 从员工中选择* 哪里 员工(@employeeType)

- 当EmployeeType为空时运行此

or EmployeeType = EmployeeType

3 个答案:

答案 0 :(得分:2)

您可以使用参数来获得结果。添加一个输入参数,该参数接受值“内部”,“外部”或空。如果为空,则应返回完整数据。为此,您可以使用案例陈述。请参阅以下示例:

select * 
from 
    employee 
where 
    employeetype =case when isnull(@var, '')='' then employeetype else @var end

注意:变量@var接受“内部”或“外部”值。要获取完整数据,请指定为空。 如果变量@var为null,则可以使用下面的查询。

select * 
from 
    employee 
where 
    employeetype =isnull(@var, employeetype)

对于昏迷分隔值,请尝试:

select * 
from 
    employee 
where 
    employeetype =(select col from fnSplit(case when isnull(@var,'')='' 
                                            then employeetype else @var end, ','))

答案 1 :(得分:1)

假设你有一个SP带一个参数@EType

然后使用值或NULL将您的参数发送到SP,并像这样修改您的SP ..

Select * From Employees
Where (EmployeeType = @eType OR @eType is NULL)

答案 2 :(得分:0)

where @EmployeeType is null or EmployeeType = @EmployeeType
相关问题