You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:14:02