2016-01-22 54 views
1

我有一个客户号码和国家的表格。我需要将所有不同国家的客户都归还给他们。也就是说,不要告诉我客户所在国家对所有记录的价值观是一样的。仅当第二列不同时才返回行

在下面的例子:

╔══════════╦═════════╗ 
║ Customer ║ Country ║ 
╠══════════╬═════════╣ 
║  123 ║ USA  ║ 
║  123 ║ USA  ║ 
║  123 ║ UK  ║ 
║  456 ║ USA  ║ 
║  456 ║ USA  ║ 
║  789 ║ FRA  ║ 
║  789 ║ FRA  ║ 
║  789 ║ FRA  ║ 
╚══════════╩═════════╝ 

应该返回:

╔══════════╗ 
║ Customer ║ 
╠══════════╣ 
║  123 ║ 
╚══════════╝ 
+0

'组by'和'having'应该解决相当容易的。 –

回答

2

您可以通过COUNT(DISTINCT)group by

做到这一点
select Customer 
from (
    select 
    Customer, 
    COUNT(DISTINCT Country) cnt 
    from my_table 
    group by Customer 
) x 
where cnt > 1 

sql fiddle demo

加入having可以删除子查询

select 
Customer 
from my_table 
group by Customer 
having COUNT(DISTINCT Country) > 1 

sql fiddle demo

0

我认为CTE将解决您的问题

with a(customer,country ,rank) 
as 
(
select customer,country , rank() over(partition by a order by b) as rank from table 
) 

select distinct customer from a 
where rank>1 
相关问题