Необходимо проверить более 1 условия для столбца в SQL Server - PullRequest
0 голосов
/ 22 мая 2019

У меня есть таблица Тест:

Идентификационное имя
1 Имп
1 Критический
2 Имп
2 НП
3 NA
3 NAN

Теперь я хочу сделать 3 запроса:

1-й Нужно найти идентификатор, который имеет Ony Imp, но не критично:

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

Имя идентификатора
2 Imp
2 NA

2nd Нужно найти идентификатор, который имеет Imp и Critical

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

Имя ID
1 Imp
1 Критическое

3-ий Требуется найти идентификатор, который не имеет Imp или критический оба

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

3 NA
3 NAN

Я попытался:

  select * from test where name not in ('imp','critical')

Но он также дал мне идентификатор 2.

Я пытался добавить IN и Not IN в свой запрос, но почему-то это не дает мне правильный вывод.

1 Ответ

2 голосов
/ 22 мая 2019

Вы можете использовать предложения EXISTS и NOT EXISTS следующим образом:

Переменная таблицы для условий тестирования:

DECLARE @test TABLE (id INT, name VARCHAR(10))
INSERT INTO @test VALUES (1, 'Imp'), (1, 'Critical'), (2, 'Imp'), (2, 'NA'), (3, 'NA'), (3, 'NAN')

Случай 1 - СУЩЕСТВУЕТ при одном условии, а НЕ СУЩЕСТВУЕТ при другом.

SELECT * FROM @test t 
WHERE EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'Imp')
AND NOT EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'critical')

Возвращает

2   Imp
2   NA

Случай 2 - СУЩЕСТВУЕТ при обоих условиях

SELECT * FROM @test t 
WHERE EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'Imp')
AND EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'critical')

Возвращает

1   Imp
1   Critical

Случай 3 - НЕ СУЩЕСТВУЕТ при обоих условиях

SELECT * FROM @test t 
WHERE NOT EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'Imp')
AND NOT EXISTS (SELECT * FROM @test WHERE id = t.id AND name = 'critical')

Возвращает

3   NA
3   NAN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...