返回具有相同ID的行,但排除第二列中的某些行

时间:2018-09-24 11:04:27

标签: sql sql-server distinct

我也曾遇到过类似的问题,但并不能完全满足我的需要。可以说我有一张桌子。

+-----+-------+
| ID  | Value |
+-----+-------+
| 123 |     1 |
| 123 |     2 |
| 123 |     3 |
| 456 |     1 |
| 456 |     2 |
| 456 |     4 |
| 789 |     1 |
| 789 |     2 |
+-----+-------+

我想返回DISTINCT ID,但排除具有特定值的ID。例如,假设我不希望任何ID的值为3。我的结果应该是这样。

+-----+
| ID  | 
+-----+
| 456 |
| 789 |
+-----+

我希望这是有道理的。如果需要更多信息,请询问,如果已经回答,请给我指明正确的方向。谢谢。

4 个答案:

答案 0 :(得分:2)

您可以使用group byhaving

select id
from t
group by id
having sum(case when value = 3 then 1 else 0 end) = 0;

having子句为每个id计算“ 3”的数量。 = 0仅返回计数为0(即不存在“ 3”)的组。

答案 1 :(得分:1)

您可以使用not exists

select distinct t.id
from table t
where not exists (select 1 from table t1 where t1.id = t.id and t1.value = 3);

答案 2 :(得分:1)

尝试一下:

select id from tablename
group by id
having (case when value=3 then 1 else 0 end)=0

答案 3 :(得分:0)

您还可以使用EXCEPT比较以下两个数据集,以得出所需的结果集

select distinct Id from ValuesTbl
except
select Id from ValuesTbl where Value = 3