Игнорировать строку в SQL, если одно значение столбца равно, а другое не равно - PullRequest
0 голосов
/ 19 мая 2018

У меня есть таблица ниже, где SL - уникальное значение, столбец Number может иметь тип 2 или A или B. Я хочу игнорировать число, имеющее тип B, когда тот же номер также имеет тип A.

SL  Number  Type
1   101     A
2   102     A
3   102     B
4   103     A
5   104     B

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

SL  Number  Type
1   101     A
2   102     A
4   103     A
5   104     B

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

«B» больше, чем «A».
Таким образом, меньший тип не должен существовать.

SELECT *
FROM yourtable t
WHERE NOT EXISTS 
(
   SELECT 1
   FROM yourtable dup
   WHERE dup.Number = t.Number
     AND dup.Type < t.Type
)

Таким образом, будет выбран наименьший тип на число.Даже с дополнительными типами.

0 голосов
/ 19 мая 2018

Попробуйте:

SELECT t1.SL, t1.Number, t1.Type
FROM mytable t1
WHERE t1.Type = 'A' OR NOT EXISTS 
(
   SELECT 1
   FROM mytable t2
   WHERE t2.Number = t1.Number AND t2.Type = 'A'
)

Демонстрация здесь

Объяснение:

Theзапрос выбирает все A строк из-за

t1.Type = 'A'

и всех B строк при условии, что является запросом NOT EXISTS оператор возвращает нет строк.Этот подзапрос

SELECT 1
FROM mytable t2
WHERE t2.Number = t1.Number AND t2.Type = 'A' -- t1 is a reference to the outer table

возвращает строку, если существует запись A, имеющая тот же Number, что и запись B.

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