У меня ниже таблицы, где SL - уникальное значение, столбец Число может иметь 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
Попробуй это:
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'
)
Объяснение:
Запрос выбирает все строки A
из-за
t1.Type = 'A'
и все строки B
при условии, что sbuquery оператора 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
"B" больше, чем "A".
Поэтому меньший тип не должен существовать.
SELECT *
FROM yourtable t
WHERE NOT EXISTS
(
SELECT 1
FROM yourtable dup
WHERE dup.Number = t.Number
AND dup.Type < t.Type
)
Таким образом будет выбран наименьший тип для каждого номера. Даже с дополнительными типами.