2017-02-14 2 views
0

Предположим, что у меня есть таблица, как, например:Выберите верхний 2 из отдельных полей с другим полем

PointOfSaleId, Name, Address 

Я хотел бы выбрать верхние 2 записи, имеющие одинаковую Name и Address вместе с 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 

Это будет перечислить все пары же Name и Address заказанных PointOfSaleId во внутреннем запросе, а затем во внешнем запросе вы выбираете только две верхние пары.

+0

Спасибо, что помогли! –

0

Попробуйте

select top(2) with ties PointOfSaleId, Name, Address 
from myTable 
order by row_number() over (partition by Name, Address order by PointOfSaleId) 
Смежные вопросы