Вернуть строку каждой n-ой записи
Как я могу вернуть каждую n-ю запись из подзапроса на основе числового параметра, который я предоставляю?
Например, у меня может быть следующий запрос:
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 записей, я бы получил 30, 60 и 90 строк.
Если я перейду в число 40, а набор результатов содержит 90 записей, я бы получил 40-ю и 80-ю строки.
В качестве дополнительной заметки для справочной информации это используется для захвата ключа/идентификатора каждой n-й записи для элемента управления поисковым вызовом.
Ответы
Ответ 1
Здесь ROW_NUMBER
может помочь. Для этого требуется предложение 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
Ответ 2
Вам не нужно использовать номер строки, любое целое поле будет делать. На большинстве таблиц у нас есть поле autonumber. Для простоты я буду называть его ID. Чтобы отобразить каждую 13-ю запись:
Select ID, LastName, FirstName FROM Users WHERE ID%13 = 0 ORDER BY ID
Ответ 3
Выберите B.name из (выберите row_number() over (порядок по заказу) как row_num, A.name
from (Выберите имя, 'P1', заказывая из [dbo]. [every_2nd_record]) A) B
где B.row_num% 2 = 0