(QUERY) - 从特定范围中选择行

问题描述 投票:0回答:1

我的任务是在一系列@FirstOrderDate和@LastOrderDate之间返回订单,但是只返回那些应该属于@Page和@PageSize定义的页面的行。

例如,如果有1,000个订单日期介于@FirstOrderDate和@LastOrderDate之间,而@PageSize为100且@Page为1,那么将返回1,000个订单中的前100个订单。如果@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语句中。

任何帮助将非常感激。

sql tsql
1个回答
1
投票

IF在这里无效。直接在ORDER BY条款之后,试试这个:

OFFSET (@Page-1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;
© www.soinside.com 2019 - 2024. All rights reserved.