Чтобы посчитать число страниц, воспользуемся следующим простым алгоритмом:
если число строк запроса нацело делится на число записей на странице, то результат целочисленного деления одного на другое дает число страниц;
если существует ненулевой остаток целочисленного деления числа строк запроса на число записей на странице, то к результату целочисленного деления добавляем единицу (последняя страница неполная).
Это алгоритм реализуется стандартными средствами с помощью оператора CASE:
Чтобы получить для каждой строки запроса номер страницы, на которую она должна попасть, мы можем применить аналогичный алгоритм, только применить его нужно не к общему числу строк (total), а к номеру строки. Этот номер строки мы сможем получить с помощью ранжирующей функции ROW_NUMBER, выполнив требуемую по условию сортировку по цене: