2015-10-08 2 views
-1
TId || Status 
-------------- 
4789 12 
4789 5 
4789 5 
3696 12 
3696 12 
4568 12 
4568 12 

У меня есть эта таблица и то, что я хочу, чтобы получить это, чтобы выбрать все TID, где статус являются все = 12.SQL - ВЫБРАТЬ С ФИЛЬТРОМ

Мой результат ожидается, как это:

3696 
4568 

Кто-то может помочь мне с этим PLS ?.

ответ

1

Группы по tid колонку и принимать только те, которые имеют нулевой раза в status = 12

select tid 
from your_table 
group by tid 
having sum(case when status <> 12 then 1 else 0 end) = 0 
+0

это сделайте это .. очень важно – user2232273

2

Агрегация и having оговоркой является хорошим способом, чтобы подойти к этому. Я бы сравнил минимальное и максимальное значения:

select t.tid 
from table t 
group by t.tid 
having min(status) = max(status) and min(status) = 12; 

Но есть и другие подходы. Если у вас есть таблица tid, вы можете использовать exists и not exists:

select tids.* 
from tids 
where not exists (select 1 from table t2 where t2.tid = tids.tid and t2.tid <> 12); 

Этот подход может воспользоваться индексом на tids и не требует агрегации.

+0

yeahh..thanks ... – user2232273

Смежные вопросы