SQL Server:筛选标准中具有多个条件的数据

SQL Server:筛选标准中具有多个条件的数据,sql,sql-server,where-clause,Sql,Sql Server,Where Clause,我正在使用SQL Server 2017,并尝试在where语句中使用“和/或”清理我的数据集 到目前为止,这是我所拥有的,但它不起作用 WHERE ([Campaign] NOT LIKE '%Search%') AND (([Campaign] = '2018 BRAND' AND [Tactic] <> 'Display' AND [Date] NOT BETWEEN '2018-01-01' AND '2018-

我正在使用SQL Server 2017,并尝试在where语句中使用“和/或”清理我的数据集

到目前为止,这是我所拥有的,但它不起作用

WHERE 
    ([Campaign] NOT LIKE '%Search%') 
    AND (([Campaign] = '2018 BRAND' 
          AND [Tactic] <> 'Display' 
          AND [Date] NOT BETWEEN '2018-01-01' AND '2018-04-27')
         OR 
         ([Campaign] = '2017 BRAND' 
          AND [Date] NOT BETWEEN '2017-01-01' AND '2017-01-07'))
我试图消除的三件事是:

  • 所有搜索活动(第2、6、8行)
  • 2017年1月1日至2017年7月1日期间“2017品牌”活动的所有数据(第1行)
  • 2018年1月1日至2018年4月29日期间“2018品牌”活动的所有数据,属于“展示”策略(第9行和第10行)

  • 如果您试图删除行,那么我认为
    更合适:

    WHERE ([Campaign] NOT LIKE '%Search%') OR
          NOT ([Campaign] = '2018 BRAND' AND Tactic = 'Display' AND [Date] BETWEEN '2018-01-01' AND '2018-04-27') OR
          NOT ([Campaign] = '2017 BRAND' AND [Date] BEWEEN '2017-01-01' and '2017-01-07')
    

    你的逻辑有点复杂。我的方法是使用
    NOT
    ,这样您就可以看到每个条件,并简单地保留所有不匹配的内容。

    为什么不将删除查询拆分为可管理的块,而不是尝试一次性完成?
    WHERE ([Campaign] NOT LIKE '%Search%') OR
          NOT ([Campaign] = '2018 BRAND' AND Tactic = 'Display' AND [Date] BETWEEN '2018-01-01' AND '2018-04-27') OR
          NOT ([Campaign] = '2017 BRAND' AND [Date] BEWEEN '2017-01-01' and '2017-01-07')