我正在尝试基于以下过滤器获取员工列表:
DepartmentId
DivisionId
用例1:如果用户只选择部门作为过滤器,则忽略DivisionId并仅按部门Id 获取员工
用例2:如果用户同时选择了部门和部门作为过滤器,则按部门ID和部门ID 获取员工
用例3:如果未选择部门,则获取所有员工(放弃部门和部门过滤器(
查询:
DECLARE @departmentId AS int, @divisionId AS int
set @departmentId = 1
set @divisionId = 100
select * from Employees where
(DepartmentId is null or
(DepartmentId = @departmentId and
(DivisionId is null or DivisionId = @divisionId)))
这里的问题是,我甚至得到DepartmentId和DivisionId都为空的记录,而我只想要一个DepartmentId = 1 and DivisionId = 100
的记录
有人能帮我解决这个逻辑问题吗?
我猜你想要:
where (@DepartmentId is null or DepartmentId = @departmentId) and
(@DivisionId is null or DivisionId = @divisionId)
试试这个:
where (@departmentID is null) or
(@divisionID is null and DepartmentID = @departmentID) or
(DepartmentID = @departmentID and DivisionID = @divisionID)