2017-02-14 75 views
0

假设我有一个表作为这样:选择从不同的领域顶2与另一场

PointOfSaleId, Name, Address 

我想选择顶部的2条记录具有相同NameAddress,与PointOfSaleId在一起。

例如我有以下记录:

PointOfSaleId Name Address 
1    Foo Bar 
2    Foo Bar 
3    Foo Bar 
4    Foo2 Bar2 

结果应选择以下内容:

1    Foo Bar 
2    Foo Bar 
4    Foo2 Bar2 

是否有这样做的任何可行的方法?

回答

3

可以使用row_number排序函数和写出这样的查询:

select 
    T.PointOfSaleId, 
    T.Name, 
    T.Address 
from 
(
    select 
     PointOfSaleId, 
     Name, 
     Address, 
     row_number() over (partition by Name, Address order by PointOfSaleId asc) as Num 
    from your_Table 
) as T 
where T.Num <= 2 

这将枚举通过PointOfSaleId下令相同NameAddress所有对在内部查询,然后在外部查询你只选择每对中的前两个。

+0

谢谢,这帮助! –

0

尝试

select top(2) with ties PointOfSaleId, Name, Address 
from myTable 
order by row_number() over (partition by Name, Address order by PointOfSaleId)