假设我有一张表:
PointOfSaleId, Name, Address
我想选择具有相同Name
和Address
的前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
有没有可行的方法呢?
答案 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
排序的所有Address
和PointOfSaleId
对,然后在外部查询中,您只选择每对中的前两个。< / 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)