Игнорировать строку в SQL, если одно значение столбца равно, а другое не равно

0

У меня ниже таблицы, где 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
Теги:

2 ответа

1
Лучший ответ

Попробуй это:

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

  • 0
    Спасибо, это отлично работает для таблицы выше, имеющей 3 столбца. Но моя таблица имеет больше столбца, и я использую эти значения для фильтра. Можете ли вы объяснить, как работает этот запрос, чтобы я мог расширить его для моего запроса
  • 1
    @Rahul. , , Можно только ответить на вопрос, который вы задаете, и Гиоргиос это сделал. Если у вас есть другой вопрос, задайте его как вопрос , а не как комментарий, предоставляя соответствующие данные и объяснения. Я бы порекомендовал вам также принять ответ.
0

"B" больше, чем "A".
Поэтому меньший тип не должен существовать.

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню