2013-02-12 2 views
0

Мне нужно создать запрос для возврата строк, где Customer_ID имеет несколько связанных с ним проспектов_ID. Например, я хотел бы, чтобы запрос был ale, чтобы возвращать строки 2 и 3 ниже, поскольку идентификатор Customer_ID тот же, но Prospect_ID - разные, но не строки 5 и 6, так как Prospect_ids одинаковы:SQL Query Logic Несколько записей

Prospect_ID Customer_ID 
1001   31001 
1002   31002 
1003   31002 
1004   31003 
1005   31004 
1005   31004 
+0

Добро пожаловать на ТАК! Можете ли вы показать нам, какой SQL у вас есть до сих пор? Где вы застряли? – Jacco

+1

Какие rdbms вы используете? – Taryn

ответ

4

чтобы получить Customer_id с более чем одной отдельной Prospect_id:

select customer_id 
from yourtable 
group by customer_id 
having count(distinct prospect_id) >1 

См SQL Fiddle with Demo

Если вы хотите вернуть все детали для тех Customer_Ids, то вы можете использовать:

select * 
from yourtable t1 
where exists (select customer_id 
       from yourtable t2 
       where t1.customer_id = t2.customer_id 
       group by customer_id 
       having count(distinct prospect_id) >1) 

См. SQL Fiddle with Demo.

Это также может быть записана в виде (спасибо @ypercube):

select * 
from yourtable t1 
where exists (select customer_id 
       from yourtable t2 
       where t1.customer_id = t2.customer_id 
       and t1.prospect_id <> t2.prospect_id) 

См SQL Fiddle with Demo

0

Вы можете сделать это с оконными функциями:

select prospect_id, customer_id 
from (select t.*, 
      COUNT(*) over (partition by prospect_id, customer_id) as cnt_pc, 
      COUNT(*) over (partition by customer_id) as cnt_c 
     from t 
    ) t 
where cnt_pc <> cnt_c and cnt_c > 1