2015-07-06 3 views
2

Я следующие примеры данных из таблицыФильтр группы в 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') 

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

+0

Какова Ваша база данных? – Mihai

+0

Это база данных MSSQL. – KMK

ответ

6
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 
-1

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

Select distinct *from table1 
0

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

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

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

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