从具有另一个字段的不同字段中选择前2

时间:2017-02-14 08:40:24

标签: sql sql-server

假设我有一张表:

PointOfSaleId, Name, Address

我想选择具有相同NameAddress的前2条记录以及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

有没有可行的方法呢?

2 个答案:

答案 0 :(得分: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

这将枚举内部查询中由Name排序的所有AddressPointOfSaleId对,然后在外部查询中,您只选择每对中的前两个。< / p>

答案 1 :(得分:0)

尝试

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