首页 > 解决方案 > SQL Server:在条件中使用多个条件过滤数据

问题描述

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

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

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'))

输出:

Row   Channel     Campaign        Tactic     Date        Visits
----------------------------------------------------------------
1     Digital     2017 Brand      Display    1/1/2017     43
2     Search      2018 Search     Search     2/3/2018     50
3     Digital     2018 Brand      Video      4/10/2018   102
4     Digital     2018 Local      Display    4/9/2018     82
5     Digital     2018 eLocal     Video      3/28/2018    79
6     Search      2018 Search     Search     4/5/2018     30
7     Digital     2017 Local      Display    1/4/2017     22
8     Search      2017 Search     Search     4/5/2017     21
9     Digital     2018 Brand      Display    2/2/2018     43
10    Digital     2018 Brand      Display    2/24/2018    71

我要删除的三件事是:

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

标签: sqlsql-serverwhere-clause

解决方案


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

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,这样您就可以看到每个条件并简单地保留所有不匹配的内容。


推荐阅读