Вернуть строку каждой n-й записи - PullRequest
33 голосов
/ 26 января 2011

Как я могу вернуть каждую nth запись из подзапроса на основе числового параметра, который я предоставляю?

Например, у меня может быть следующий запрос:

SELECT
   Id,
   Key
FROM DataTable
WHERE CustomerId = 1234
ORDER BY Key

например,

Результат подзапроса может выглядеть следующим образом:

Row Id   Key
1   1    A3231
2   43   C1212
3   243  E1232
4   765  G1232
5   2432 E2325
...
90  3193 F2312

Если я передам число 30, а набор результатов подзапроса содержал90 записей, я бы получил строки 30th , 60th и 90th .

Если я передам число 40, и результатнабор содержит 90 записей, я бы получил строки 40th и 80th .

В качестве дополнительной информации, для справочной информации, это используется для захватаключ / id каждой n-й записи для пейджингового элемента управления.

Ответы [ 3 ]

58 голосов
/ 26 января 2011

Здесь ROW_NUMBER может помочь.Требуется пункт order-by, но это нормально, потому что присутствует order-by (и требуется для гарантии конкретного заказа).

SELECT t.id, t.key
FROM
(
    SELECT id, key, ROW_NUMBER() OVER (ORDER BY key) AS rownum
    FROM datatable
) AS t
WHERE t.rownum % 30 = 0    -- or % 40 etc
ORDER BY t.key
10 голосов
/ 14 ноября 2012

Вам не нужно использовать номер строки, подойдет любое целочисленное поле. В большинстве таблиц у нас есть поле autonumber. Для простоты я назову это ID. Для отображения каждой 13-й записи:

Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID
1 голос
/ 04 января 2017
Select B.name 
from (Select row_number() over (order by ordering) as row_num, 
      A.name 
      from (Select name,'P1' as ordering 
            from [dbo].[every_2nd_record]
           ) A
      ) B
where B.row_num%2=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...