我的任务是在一系列@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语句中。
任何帮助将非常感激。
IF
在这里无效。直接在ORDER BY
条款之后,试试这个:
OFFSET (@Page-1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY;