(查询)-从特定范围选择行

时间:2018-09-05 21:44:42

标签: sql tsql

我的任务是在@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语句中。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

IF在这里无效。直接在ORDER BY子句之后,尝试以下操作:

OFFSET (@Page-1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;