sqlserver,为结果集分页的sql语句,疑问

成功了,但是想知道怎么简化
select top 3 * from(
结果集R
) r
where id not in (
select top 3 id from(
结果集R
)r2
两个结果集R是相同的,这样是为了分页,取第二页,每页3个。
只是我想知道,**第二个结果集能不能简化**,我现在是select……写全的。

4个回答

select * from (结果集R)r limit m*3,m*3+3 m是你的页码

hlxaaa
hlxaaa sqlserver没有limit
大约 2 年之前 回复

SELECT TOP 3 *
FROM TableA
WHERE id < (SELECT MIN(id) FROM (SELECT TOP ((2-1)*3) id FROM Table ORDER BY id DESC) AS tabTmp)
ORDER BY id DESC
--TableA 你自己的表

方法1:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
方法3:
适用于 SQL Server 2005
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)

XianRenShan
XianRenShan 百度到的答案,可以依次试试
大约 2 年之前 回复

如果数据库是2012的可以用下面的方法试试:
SELECT * FROM tb
ORDER BY ID
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!