Ваш расчет слишком сложен:
ROW_NUM-1 AS FirstIndex,
ROW_NUM AS SecondIndex
Чтобы получить запрошенный диапазон, вам просто нужно изменить расчет, например,
SELECT
CASE WHEN ROW_NUM = 1 THEN 0 ELSE SecondIndex-999 END AS FirstIndex,
(ROW_NUM+2)/2 * 1000 AS SecondIndex
FROM ID
WHERE ROW_NUM MOD 2=1
Но что вы хотите сделать сэтот результат, пакет что ?
Редактировать:
Пока неясно, зачем вам нужна вторая таблица для вычисления диапазонов, но это создает диапазоны, начинающиеся с 1 для любого размера страницыиз n строк:
WITH ID(ROW_NUM) AS
( -- just to get some rows
SELECT day_of_calendar AS row_num
FROM sys_calendar.CALENDAR
WHERE row_num BETWEEN 1 AND 10
)
SELECT 1000 AS RowsPerPage,
Row_Num AS page_num,
rownum_to - (RowsPerPage-1) AS rownum_from,
page_num * RowsPerPage AS rownum_to
FROM ID
GROUP BY page_num
ORDER BY page_num
RowsPerPage page_num rownum_from rownum_to
1000 1 1 1000
1000 2 1001 2000
1000 3 2001 3000
1000 4 3001 4000
1000 5 4001 5000
1000 6 5001 6000
1000 7 6001 7000
1000 8 7001 8000
1000 9 8001 9000
1000 10 9001 10000