0

我有一张如下表:

ID  | Value  | Other Columns...........| .......
-----------------------------------------------
ID1 | Value1 | ....................... | .......
ID1 | Value2 | ....................... | .......
ID2 | Value3 | ....................... | .......
ID3 | Value4 | ....................... | .......
ID3 | Value4 | ....................... | .......
ID3 | Value5 | ....................... | .......
ID4 | Value4 | ....................... | .......
ID4 | Value5 | ....................... | .......
ID5 | Value2 | ....................... | .......
ID5 | Value4 | ....................... | .......
ID5 | Value5 | ....................... | .......

Value 列可以有 5 种类型的值:Value1 到 Value5。我需要编写一个查询,我应该在其中获取 Values 仅为 Value4Value5的所有 ID 。示例:ID3ID4。由于我是 SQL 新手,我应该如何以优化的方式进行操作?

4

2 回答 2

2

您可以使用group byhaving。一个简单的方法是:

select id
from t
group by id
having sum(case when value = 'value4' then 1 else 0 end) > 0 and
       sum(case when value = 'value5' then 1 else 0 end) > 0 and
       sum(case when value not in ('value4', 'value5') then 1 else 0 end) = 0;

条件是计算value给定的每个值的次数id> 0表示至少有一行具有该值。= 0表示没有具有值的行id

于 2018-11-30T21:39:13.737 回答
0

只是我给你一个查询的粗略概念。

Select * from table where value is value or value 4
于 2018-11-30T21:42:35.463 回答