查询以查找组合的唯一值

时间:2014-01-27 03:14:05

标签: sql oracle

我有两个cols ID_COL和VALUE_COL的Table。

ID_COL    VALUE_OUT
======    =========
15          10
16          10
16          11
17          10
17          11
17          12
18          10
18          12
19          11
20          11
20          12
21          12

此表格根据我们的商业规则填充了一些组合。现在我想找到如下输出。

来自应用程序的输入是11,12

我们需要在上表中搜索并找到ID_COL。在这种情况下,我需要从ID_COL返回值20(这是11,12个具有额外值的完全匹配)

匹配不是两个值,有时也可能是单个值..如果我传递12 ..我需要返回id_col 21

3 个答案:

答案 0 :(得分:0)

如果我的问题正确,那么你想找到* Id_COL *中的值,它们满足从* VALUE_OUT *的应用程序传递的输入值。

您可以使用以下查询:

    select ID_COL from table where value_out in (11,12);

希望我理解你的问题。

希望有所帮助

Vishad

答案 1 :(得分:0)

select ID_COL 
from table 
group by ID_COL 
having 
  count(0) = 2 and
  count(case when VALUE_OUT in (11,12) then 1 end) = 2

答案 2 :(得分:0)

您可以使用聚合和having子句执行此操作:

select id_col
from t
group by id_col
having sum(case when value_out = 11 then 1 else 0 end) > 0 and
       sum(case when value_out = 12 then 1 else 0 end) > 0 and
       sum(case when value_out not in (11, 12) then 1 else 0 end) = 0;

having子句中的前两个子句保证每个值都存在。第三个条款确保没有其他值。

编辑:

我意识到,对于值为整数的特定情况,您可以这样做:

having min(value_out) = 11 and max(value_out) = 12;

having min(value_out) = 11 and max(value_out) = 12 and count(distinct value_out) = 2;