Перечислите только образцы, не содержащие названия - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь запросить образцы, чтобы он отображал результат, только если у него есть имя, которое не содержит «CP». Поэтому, если есть имя «CP», не показывать строки для этого образца, однако, если нет «CP» и имеет имя «Dirt» или «Dust», показывать строки для этого номера образца.

Вот моя попытка:

select distinct SampNum
from results
where (SampName = 'Dirt' or SampName = 'Dust')
  and SampName not in ('CP')

Необработанные данные:

SampNum | SampName
1         'Dirt'
1         'Dust'
1         'CP'
2         'Dirt'
2         'Dust'
3         'Dust'
4         'CP'

Ожидаемый результат:

SampNum                     
2               
3       

Ответы [ 3 ]

2 голосов
/ 08 апреля 2019

Вы можете использовать EXCEPT здесь, чтобы вернуть SampNum с Dirt или Dust - кроме тех, которые также имеют CP:

select SampNum
from results
where (SampName = 'Dirt' or SampName = 'Dust')
EXCEPT
select SampNum
from results
where SampName = 'CP'

dbfiddle https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=0bd2b69767319581d91fd5c484de2583

create table results (SampNum int, SampName varchar(10));
insert into results values (1,'Dirt');
insert into results values (1,'Dust');
insert into results values (1,'CP');
insert into results values (2,'Dirt');
insert into results values (2,'Dust');
insert into results values (3,'Dust');
insert into results values (4,'CP');

select SampNum
from results
where (SampName = 'Dirt' or SampName = 'Dust')
EXCEPT
select SampNum
from results
where SampName = 'CP';

Возвращает:

SampNum
      2
      3
2 голосов
/ 08 апреля 2019

Дайте этому шанс ...

select distinct SampNum 
from results 
where (SampName = 'Dirt' or SampName = 'Dust') 
and SampNum not in (Select SampNum From results Where SampName in ('CP'))
1 голос
/ 08 апреля 2019

Вы можете сделать агрегацию:

select SampNum
from results
group by SampNum
having sum(case when SampName in ('Dirt', 'Dust') then 1 else 0 end) > 0 and
       sum(case when SampName = 'CP' then 1 else 0 end) = 0; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...