Фильтровать группу в 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
Используйте подзапрос для того же:
Select id,dsc from (select id,dsc from table1 group by id, dsc)
where dsc not in('Insured', 'Broker')
Используйте этот код, чтобы остановить повторение столбца
Select distinct *from table1