SQL Server: фильтрация данных по нескольким критериям в пределах критериев - PullRequest
0 голосов
/ 30 апреля 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'))

Выход:

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

3 вещи, которые я пытаюсь удалить:

  1. Все поисковые кампании (строки 2, 6, 8)
  2. Все данные в период с 01.01.2017 по 07.01.2017 для кампании «Бренд 2017» (строка 1)
  3. Все данные в период с 01.01.2008 г. по 29.04.2008 г. для кампании «Марка 2018» и являются тактикой «Отображение» (строки 9 и 10)

1 Ответ

0 голосов
/ 30 апреля 2018

Если вы пытаетесь удалить строки, тогда я думаю, что 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, чтобы вы могли видеть каждое условие и просто сохранять все, что не соответствует.

...