Фильтровать группу в MySQL

У меня есть следующие данные из таблицы

Id      Dsc
500001  INSURED
500001  THIRD PARTY
500001  THIRD PARTY
500001  THIRD PARTY
500002  INSURED
500002  THIRD PARTY
500003  INSURED
500004  BROKER
500005  CLAIMANT

Я хочу извлечь те идентификаторы, для которых Dsc не является ни "застрахованным", ни "брокером". Поскольку оба столбца содержат повторяющиеся данные, я разработал следующий запрос для этого..

Select Id from table1 where Dsc not in ('Insured', 'Broker')
Except
Select Id from table1 where Dsc in ('Insured', 'Broker')

Есть ли альтернативный способ сделать это?

4 ответа

Решение
SELECT id FROM table1 GROUP BY id 
HAVING SUM(CASE WHEN Dsc='Insured' THEN 1 ELSE 0 END)=0
AND SUM(CASE WHEN Dsc='Broker' THEN 1 ELSE 0 END)=0

Вы можете написать запрос как:

SELECT Id FROM (
SELECT Id , SUM(CASE WHEN Dsc IN ('INSURED','BROKER') THEN 1 ELSE 0 END ) AS Condition
FROM @Test
GROUP BY Id
) T 
WHERE Condition = 0

DEMO

Используйте подзапрос для того же:

Select id,dsc from (select id,dsc from table1 group by id, dsc) 
where dsc not in('Insured', 'Broker')

Используйте этот код, чтобы остановить повторение столбца

Select distinct *from table1 
Другие вопросы по тегам