我希望从查询中获取某些sql结果,具体取决于它们的位置,例如,考虑此代码
SELECT * FROM Product ORDER BY id asc
可以返回至少100个左右的结果。
问题是,如何获得前1到10的结果,然后在另一个不同的,单独的查询中,我怎样才能得到11-20的结果甚至得到位于该查询51-60的结果?
答案 0 :(得分:2)
使用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
答案 1 :(得分:0)
有很多方法,这是使用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