我的任务是在@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语句中。
任何帮助将不胜感激。
答案 0 :(得分:1)
IF
在这里无效。直接在ORDER BY
子句之后,尝试以下操作:
OFFSET (@Page-1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;