Использование нескольких условий в предложении where SQL Server - PullRequest
0 голосов
/ 25 сентября 2018

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

Я хочу получить учетные записи, в которых статус не должен быть:

(xxx, ina, nfc)

Также я хочу получить учетные записи, в которых статус в RWD, но только когда account # равен нулю,Я написал приведенный ниже запрос, но он дал результат только для одного условия.пожалуйста, помогите мне.

select *
from finalres
where 1 = 0
   or (status = 'rwd' and account# is null)
   or status not in ('xxx', 'ina', 'nfc')

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

Проблема в том, что status not in ('xxx','ina','nfc') позволяет результату включать любое status = 'rwd', даже если account# не равно нулю.Это делает (status='rwd' and account# is null) избыточным.Вам нужно будет включить 'rwd' в запрос status not in.

select 
*
from finalres
where 1 = 0
or (status='rwd' and account# is null)
or status not in ('rwd','xxx','ina','nfc')
0 голосов
/ 25 сентября 2018

Попробуйте,

    select * 
      from finalres 
     where (status='rwd' and account# is null) 
        or status not in ('xxx','ina','nfc')
0 голосов
/ 25 сентября 2018

У вас есть список статусов (xxx, ina, nfc), с которыми вам не нужны записи.Кроме того, вам нужны записи со статусом RWD только в том случае, если номер учетной записи равен нулю, а это означает, что вам нужно добавить этот статус в список статусов, которые вам не нужны.Это даст вам такой запрос:

select
    *
from
    finalres
where
     status not in ('rwd','xxx','ina','nfc')
  or (status='rwd' and account is null)
0 голосов
/ 25 сентября 2018
select * from finalres where 
(status='rwd' and account# is null) 
 or  status not in ('xxx','ina','nfc')

Вы можете проверить этот запрос по ссылке ниже:

http://sqlfiddle.com/#!18/11b3d/2

 CREATE TABLE finalres
(
  [account] int,
  [ItemNo] varchar(32),
  status varchar(100)

) 

INSERT INTO finalres (account, ItemNo, status) VALUES
  ('1', '453', 'xxx'),
  ('2', '657', '34'),
  (null, '657', 'rwd')
  ;


account     ItemNo  status
2            657     34
(null)       657     rwd
...