(QUERY) - Выбор строк из определенного диапазона - PullRequest
0 голосов
/ 06 сентября 2018

Моя задача - возвращать заказы между диапазонами @FirstOrderDate и @LastOrderDate, однако возвращаются только те строки, которые должны принадлежать странице, определенной @Page и @PageSize.

Например, если существует 1000 заказов с датой заказа, которая находится между @FirstOrderDate и @LastOrderDate, а @PageSize равно 100 с @Page как 1, то будут возвращены первые 100 из 1000 заказов. Если @Page = 2, то будут возвращены заказы 101 - 200 и т. Д.

Моя попытка выполнить конкретный запрос с использованием OFFSET:

    DECLARE 
    @FirstOrderDate DATE,
    @LastOrderDate DATE,
    @PageSize INT,
    @Page INT;

SELECT 
    O.OrderID,
    O.OrderDate,
    O.CustomerID,
    O.SalespersonPersonID
FROM Sales.Orders O 
WHERE O.OrderDate BETWEEN @FirstOrderDate AND @LastOrderDate
ORDER BY O.OrderDate
IF @Page = 1
    OFFSET 0 ROWS FETCH NEXT @PageSize ROWS ONLY;
ELSE
    OFFSET @Page * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;

Я новичок в TSQL и неправильно использую IF-Else. Что мне действительно нужно сделать, это вернуть диапазон строк, используя @Page и @PageSize. Мне трудно найти синтаксис для этого, особенно в выражении IF-Else или Case.

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 06 сентября 2018

IF здесь недействительно. Сразу после предложения ORDER BY попробуйте следующее:

OFFSET (@Page-1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...