SQL - 使用过滤器选择

时间:2015-10-08 16:08:15

标签: sql sql-server tsql

TId  || Status
--------------
4789    12
4789    5
4789    5
3696    12
3696    12
4568    12
4568    12

我有这个表,我想要的是选择所有状态都是12的TId。

我的预期结果如下:

3696
4568

有人可以帮我这个吗?。

2 个答案:

答案 0 :(得分:2)

聚合和having子句是解决此问题的好方法。我会比较最小值和最大值:

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

但还有其他方法。如果您的表格为tid,则可以使用existsnot exists

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

此方法可以利用tids上的索引,并且不需要聚合。

答案 1 :(得分:1)

tid列分组,只选择status = 12

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