我想以分页格式返回搜索结果。但是,我似乎无法成功获得查询的前10个结果。
问题是返回的'RowNum'类似于405,687,1024等。我希望它们重新编号为1,2,3,4,5等,这样当我在第1行和第20行之间指定时获得前20个搜索结果。相反,因为数字较大,我在1和10之间没有得到结果。
如果我将RowNum条件更改为:
AND RowNum < 20000
我得到了很多结果
这是sql:
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY DocumentID ) AS RowNum, *
FROM Table
) AS RowConstrainedResult
WHERE RowNum >= 1
AND RowNum < 20
AND Title LIKE '%diabetes%'
AND Title LIKE '%risk%'
任何帮助表示感谢。
答案 0 :(得分:2)
您需要在子查询中应用WHERE
。我会使用CTE(假设SQL-Server)::
WITH CTE AS
(
SELECT T.*,
ROW_NUMBER() OVER ( ORDER BY DocumentID ) AS RowNum
FROM Table T
WHERE Title LIKE '%diabetes%' AND Title LIKE '%risk%'
)
SELECT * FROM CTE
WHERE RowNum >= 1 AND RowNum < 20
答案 1 :(得分:0)
您需要将where
条件移动到子查询中:
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY DocumentID ) AS RowNum, *
FROM Table
where Title LIKE '%diabetes%'
AND Title LIKE '%risk%'
) AS RowConstrainedResult
WHERE RowNum >= 1 AND RowNum < 20
rownum
vairable正在顺序分配给所有行。你没有在前20名中选择任何一个。