如何为整个表中的一个值编写带筛选器的SQL?

如何为整个表中的一个值编写带筛选器的SQL?,sql,Sql,我有一个包含以下值的表: ID SomeId SomeResult 1 100 Ok 2 100 Ok 3 101 Ok 4 101 Error 如何编写SQL表达式以仅获取一个值: 1 100 Ok 这里SomeId的SomeResult是错误的,那么我们不应该包括这个SomeId,您可以使用group by和have。我想这就是你想要的逻辑: select someid from t group by someid having m

我有一个包含以下值的表:

ID  SomeId  SomeResult
1   100     Ok
2   100     Ok
3   101     Ok
4   101     Error
如何编写SQL表达式以仅获取一个值:

1   100 Ok
这里SomeId的SomeResult是错误的,那么我们不应该包括这个SomeId,您可以使用group by和have。我想这就是你想要的逻辑:

select someid
from t
group by someid
having min(someresult) = max(someresult) and
       min(someresult) = 'OK';
或者,如果有两个以上的值,您可能需要:

having sum(case when someresult like '%Error%' then 1 else 0 end) = 0

这将统计错误的数量,=0仅返回没有错误的ID。

您可以查找不正常的ID,并排除它们:

选择不同的SomeId、SomeResult 从t 有人不在哪里 选择SomeId 从t 结果是“好的” 不存在以下情况:

select min(t.ID) ID, SomeId, 'Ok' SomeResult
from tablename t
where t.SomeResult = 'Ok'
and not exists (
  select 1 from tablename
  where SomeId = t.SomeId and SomeResult = 'Error'
)
group by t.SomeId;
看。 结果:

| ID  | SomeId | SomeResult |
| --- | ------ | ---------- |
| 1   | 100    | Ok         |