sql - 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
我要删除的三件事是:
- 所有搜索广告系列(第 2、6、8 行)
- 2017 年 1 月 1 日至 2017 年 1 月 7 日之间的所有数据,用于“2017 品牌”活动(第 1 行)
- 2018 年 1 月 1 日至 2018 年 4 月 29 日之间的所有数据,用于“2018 品牌”广告系列,属于“展示”策略(第 9 行和第 10 行)
解决方案
如果您尝试删除行,那么我认为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
,这样您就可以看到每个条件并简单地保留所有不匹配的内容。
推荐阅读
- angular - 返回 Angular 中的模拟数据集
- printing - 打印 Azure Data Studio Notebook
- python - Pandas:如何在滚动窗口中返回 col 值大于“x”的行
- kubernetes - GKE Ingress 获取 Pod 就绪/活跃度的速度很慢
- c++ - C++: Sharing an object between two other objects
- groovy - 通过 Groovy 脚本在 SoapUI 中进行自动数据驱动测试
- python - 如何使用python从http url中删除文件夹
- hibernate - 防止休眠以记录敏感日期
- python - 动态透视表的有效方法
- memory - JNI API DestroyJavaVM 后 JVM 使用的空闲内存