SQL Server 2016 Dev WHERE子句三条件过滤逻辑实现求助
解决SQL Server 2016遗留代码的多规则WHERE过滤需求
嘿,我来帮你搞定这个WHERE子句的逻辑!刚好符合你只能修改CASE语句、不能用CTE或其他额外代码的限制,而且完全适配SQL Server 2016的环境。
先再明确下你的三条过滤规则,避免理解偏差:
- 当
DepartmentID = 99:返回所有记录,无额外限制 - 当
DepartmentID = 97:仅保留PriorityID = 10的记录 - 其他
DepartmentID:排除PriorityID = 10的所有记录
下面是直接可用的WHERE子句代码,你可以直接替换到你的遗留查询里:
SELECT * FROM Department WHERE CASE -- 规则1:DeptID=99时全部返回 WHEN DepartmentID = 99 THEN 1 -- 规则2:DeptID=97时仅留PriorityID=10的记录 WHEN DepartmentID = 97 THEN CASE WHEN PriorityID = 10 THEN 1 ELSE 0 END -- 规则3:其他DeptID排除PriorityID=10的记录 ELSE CASE WHEN PriorityID != 10 THEN 1 ELSE 0 END END = 1
逻辑解释
这个CASE语句的核心是通过返回1/0来控制是否选中当前行:
- 对于
DepartmentID=99的行,直接返回1,所以所有这类行都会被包含 - 对于
DepartmentID=97的行,只有当PriorityID=10时才返回1,其余返回0,实现精准过滤 - 对于其他部门的行,只有
PriorityID≠10时返回1,自动排除掉PriorityID=10的记录
完全满足你的遗留代码修改限制,不需要任何CTE、临时表或者其他语法,直接替换WHERE里的CASE部分就行。
内容的提问来源于stack exchange,提问作者Oded Dror
相关产品推荐
相关产品推荐

