我希望根据查询的位置从查询中获取某些 sql 结果,例如,考虑此代码
SELECT * FROM Product ORDER BY id asc
这可能会返回至少 100 个左右的结果。
问题是,我怎样才能得到前 1 - 10 个结果,然后在另一个不同的单独查询中,我怎样才能得到 11 - 20 的结果,甚至得到位于 51 - 60 的结果那个查询?
我希望根据查询的位置从查询中获取某些 sql 结果,例如,考虑此代码
SELECT * FROM Product ORDER BY id asc
这可能会返回至少 100 个左右的结果。
问题是,我怎样才能得到前 1 - 10 个结果,然后在另一个不同的单独查询中,我怎样才能得到 11 - 20 的结果,甚至得到位于 51 - 60 的结果那个查询?
使用 CTE 获取行号,然后按行列查询
with your_query as(
SELECT ROW_NUMBER() OVER(ORDER BY ID ASC) AS Row, *
FROM Product
)
select * from your_query
where Row >=5 and Row<=10
有很多方法,这是使用ROW_NUMBER的一种方法:
DECLARE @StartRow INTEGER = 11
DECLARE @EndRow INTEGER = 20
;WITH Data AS
(
SELECT TOP(@EndRow) ROW_NUMBER() OVER (ORDER BY id) AS RowNo, *
FROM Product
)
SELECT *
FROM Data
WHERE RowNo BETWEEN @StartRow AND @EndRow
ORDER BY Id