Оберните ваши объединенные запросы в другой как производную таблицу, и вы можете использовать верхнее предложение.
SELECT TOP 100 * FROM (
SELECT * FROM table where field = 'entry'
UNION ALL
SELECT * FROM table where field = 'entry#'
) sortedresults
Тогда вы были на правильном пути. Добавьте определенный столбец к каждому из ваших подмножеств отсортированных результатов, и затем вы сможете использовать его, чтобы сохранить порядок сортировки.
WITH SearchResult AS
(SELECT *, ROW_NUMBER() OVER (ORDER BY QueryNum) as RowNum FROM
(SELECT *, 1 as QueryNum FROM KeywordTable WHERE field = 'Keyword'
UNION ALL
SELECT *, 2 from KeywordTable WHERE field = 'Keyword#'
) SortedResults
)
SELECT * from SearchResults WHERE RowNum BETWEEN 4 and 10
Важно, чтобы вы также сортировали каждый подзапрос по чему-то другому, кроме ключевого слова, чтобы их порядок оставался неизменным между запусками (и как вторичная сортировка в функции номера строки). Пример: скажем, у вас есть k1, k2, k3, k4, k5 - если вы выберете * где ключевое слово типа k%, вы можете получить k1, k2, k3, k4, k5 один раз и k5, k4, k3, k2, k1 следующий (SQL не гарантирует порядок возврата и может отличаться). Это скинет ваш пейджинг.