我正在尝试写一个查询来实现分页,我的基本要求是我需要一个查询,在这个查询中,我可以给出返回的最小和最大行数范围,例如,对于页面1,我需要从1- 10到11-20的记录,以此类推。
通过一些帮助,形成互联网,在这里,我已经写下了以下查询,但它并不是真的工作,它应该返回给我一个大的总行,无论范围是什么(可能我在查询中遗漏了一些连接)
SELECT b.id,b.title,b.name
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY (select NULL as noorder)) AS RowNum, *
FROM [student] b
) as alias,[student] b,[class] c
WHERE b.[status]=1
AND c.id=b.class
AND c.name='Science'
AND RowNum BETWEEN 1 AND 5
ORDER BY b.dtetme DESC我在修理的时候迷路了,有人能指出一下错误吗?谢谢!
发布于 2013-06-27 20:48:21
你的整个查询逻辑+ ROW_NUMBER应该放在子查询中。您只使用外部WHERE进行分页。
ROW_NUMBER必须具有要在其上实现分页的ORDER BY。
SELECT a.id ,
a.title ,
a.name
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY b.dtetme DESC) AS RowNum, b.*
FROM [student] b
INNER JOIN [class] c ON c.id = b.class
WHERE b.[status] = 1
AND c.name = 'Science'
) a
WHERE RowNum BETWEEN 1 AND 10 -- change numbers here for pages
ORDER BY t.RowNum发布于 2013-06-27 20:48:54
我认为问题出在FROM中添加了[student] b,请尝试将连接移动到子查询中。
SELECT a.id, a.title, a.name
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY (select NULL as noorder)) AS RowNum, *
FROM [student] b
JOIN [class] c ON c.id = b.class
WHERE b.[status]=1
AND c.name='Science'
) as a
WHERE a.RowNum BETWEEN 1 AND 5
ORDER BY a.dtetme DESC此外,您可能希望考虑将其包装在过程或函数中,以便可以更改范围。
发布于 2013-06-27 20:50:25
看起来你想要这样的东西:
SELECT t.id,t.title,t.name FROM (
SELECT s.id,s.title,s.name, RowNum = ROW_NUMBER() OVER(ORDER BY s.dtetme DESC)
FROM student s
INNER JOIN class c ON c.id = s.class
WHERE s.[status]=1 AND c.name='Science' ) AS t
WHERE t.RowNum BETWEEN 1 AND 5
ORDER BY t.RowNumhttps://stackoverflow.com/questions/17343471
复制相似问题