Как использовать T-SQL для выбора N строк каждые N строк?

#sql #sql-server #tsql #select #row-number

Вопрос:

У меня есть несколько сотен строк данных, пронумерованных SELECT ROW_NUMBER() OVER (ORDER BY LastName) .

Мне нужно пропустить 3 из этих строк каждые 3 строки в этом выборе. Поэтому мне нужно выбрать строки 1, 2, 3… затем пропустить строки 4, 5, 6… затем включить строки 7, 8, 9… затем пропустить строки 10, 11, 12… и так далее, и так далее. Мне нужно уметь делать это динамически, чтобы он масштабировался с любым выбором размера.

(Мне также нужно будет получить обратные результаты вышесказанного, но предполагаю, что я могу экстраполировать из предоставленного ответа.)

Ответ №1:

Вы можете использовать подзапрос:

 select t.*
from (select t.*, row_number() over (order by lastname) as seqnum
      from t
     ) t
where seqnum % 6 in (1, 2, 3);