2014-01-27 5 views
0

У меня есть таблица с двумя cols ID_COL и VALUE_COL.Запрос, чтобы найти уникальное значение для комбинаций

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 

Эта таблица заполнена некоторыми комбинациями, основанными на нашем правиле biz. Теперь я хочу найти результат следующим образом.

вход из приложения 11,12

мы должны искать в таблице выше, и нужно найти ID_COL. В этом случае мне нужно вернуть значение 20 из ID_COL (это одно точное соответствие из 11,12 других, имеющих дополнительные значения)

Это не два значения, которые могут совпадать, иногда это может быть одно значение. If i pass 12 .. Мне нужно вернуть id_col 21

+0

Будет ли всегда быть два входных значений, которые необходимо чтобы соответствовать, или может быть более или менее? Всегда ли будет одна соответствующая строка для возврата или могут быть кратные? –

+0

Это не два значения, которые могут совпадать, иногда это может быть одно значение. Если я прохожу 12 .. мне нужно вернуть id_col 21 – UserKK

+0

Пожалуйста, отредактируйте свой вопрос и добавьте туда эту информацию, потому что это имеет отношение к ответу на ваш вопрос. (Это поможет тем, кто пытается ответить вам.) –

ответ

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 
0

Если я правильно задал вопрос, вы хотите найти значения в * Id_COL *, которые удовлетворяют как входным значениям, переданным из приложения для * VALUE_OUT *.

Вы можете использовать приведенный ниже запрос для этого:

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

Надежда я понял вас вопрос правильно.

Надеется, что это помогает

Vishad

+0

Нет, это не оно. –

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, что каждое значении настоящее. Третье предложение гарантирует, что других значений нет.

EDIT:

Я понимаю, что для вашего конкретного случая, когда значения являются целыми числами, вы можете сделать:

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; 
Смежные вопросы