SQL Where 子句带有 If(或 Case)语句?

标签 sql t-sql

我有以下 SQL 语句:

SELECT 
    WORKORDER.WONUM,
    WORKORDER.WO3, 
    WORKORDER.DESCRIPTION WO_DESC, 
    WORKORDER.WORKTYPE, 
    WORKORDER.STATUS, 
    WORKORDER.WOPRIORITY, 
    (case when WORKORDER.CUSTREQ1=1 then 'Yes' else 'No' end) WO18, 
    WORKORDER.REPORTDATE, 
    WORKORDER.ACTFINISH, 
    (WORKORDER.LOCATION + ' ' +LOCATIONS.DESCRIPTION) LOC_DESC
FROM WORKORDER 
    LEFT OUTER JOIN LOCATIONS ON WORKORDER.LOCATION = LOCATIONS.LOCATION 
WHERE 
    WORKORDER.HISTORYFLAG = 0 
    AND WORKORDER.ISTASK = 0 
    AND WORKORDER.STATUS = 'COMP' 
    AND WORKORDER.STATUSDATE >= getdate() - 1 
    AND WORKORDER.LOCATION LIKE 'ABC%'

我想添加一个附加条件(可能在 WHERE 子句中)来启用以下行为:
- 如果工单 WORKTYPE 为“PM”且 WOPRIORITY 为 5,则不要包含它!
- 如果工作订单 WORKTYPE 是其他任何内容,则允许任何优先级

我不确定在 WHERE 子句中放入什么类型的 IF 或 CASE 语句来具体限制优先级 5 PM。非常感谢任何和所有的帮助!提前致谢!


我可能找到了解决办法!我已将以下行添加到 WHERE 子句的末尾:

AND (case when WORKORDER.WORKTYPE='PM' then WORKORDER.WOPRIORITY<>5)

最佳答案

我认为你可能想得太仔细了......

WHERE NOT (WorkType = 'PM' AND WOPRIORITY = 5)

关于SQL Where 子句带有 If(或 Case)语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170386/

相关文章:

sql - 可以在 PostgreSQL IN 子句中包含集合吗?

mysql - 'generated' 列上的 SQL SUM

sql - 查找任何 3 个公共(public)属性的重复记录

sql-server - 从 Excel 导入到 SQL Server 时将日期转换为数字

sql-server - 在时间线 SQL Server 中对事件进行分组

MySQL 按多个日期和结果分组总计

mysql - 如何进行将信息带过来的更新查询(MYSQL)?

sql - 如何从 SQL Server 中的 EAV 表创建 JSON

sql-server - SQLSERVER - 导入和解析来自 wordpress 的特殊 XML

sql-server - 计算发货时间超过 X 天的订单百分比的更好方法?