Фильтрация таблицы с несколькими критериями где - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь выбрать из таблицы только те данные, которые соответствуют моим критериям. Я в основном хочу

исключить год 2019,
исключить где акры = 0,
исключить где policynumber равен нулю,
исключать где (liab = 0 и акры> 0).

Возможно, я получаю отрицание некоторых из них неправильно, поскольку я не получаю ожидаемое количество строк. Есть ли способ сделать это в несколько этапов, как в Excel, но я, очевидно, не хочу сделать это в Excel.

from  [dbo].[Hail_Data_2013_2018_incl_SSN]
where cropyear <> 2019 or (policynumber is not null) or (PolicyAcres <> 0) 
or (Policyliability <> 0 or PolicyAcres < 0) 

Выполнение этого пошагового шага сработало бы, есть ли возможность переписать его, чтобы сделать это пошагово, или моя комбинация 'или' неправильная?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Я думаю, вы хотите это:

where 
  (cropyear <> 2019) and
  (policynumber is not null) and 
  (PolicyAcres <> 0) and 
  (Policyliability <> 0 or PolicyAcres <= 0)
0 голосов
/ 03 апреля 2019

Я думаю, вашей логике нужна работа.Я подозреваю, что вам нужно «И», а не «ИЛИ».Опубликуйте таблицу данных и ожидаемые результаты, и мы можем помочь вам в этом.

declare @mydata as table (policyacres int, policynumber varchar(10), Policyliability int, cropyear int)

INSERT INTO @mydata
Select -1, '123x', 0, 2019 UNION ALL
Select 1,'224y', 0, 2019 UNION ALL
Select -1,'223d',0,2020

Select * from @mydata 
 where cropyear <> 2019 and (policynumber is not null) and (PolicyAcres <> 0) and (Policyliability = 0 and PolicyAcres < 0)
...