我正在构建一个网格机制,我需要从数据库中检索找到的总数或记录的数据,仅检索其中包含 row_number 的这些记录的范围。
我正在使用 Sql Server 进行测试,但我也需要在 Oracle 和 MySql 上支持它。
这就是我正在尝试的,但我无法让它发挥作用:
SELECT * FROM
(SELECT ROW_NUMBER() AS RN,
COUNT(*) AS TOTALCN,
Id,
Name,
Phone
FROM MyTable WHERE Deleted='F')
WHERE RN > 100 AND RN < 150;
这个想法是:
MyTable -> number of records: 1000
Select Id, Name, Phone from MyTable where Deleted='F' -> number of records: 850
Get the records 100 to 150 from the 850.
我想要一个像这样的选择:
RN TOTALCN Id Name Phone
1 850 Data Data Data
2 850 Data Data Data
3 850 Data Data Data
4 850 Data Data Data
5 850 Data Data Data
6 850 Data Data Data
The CN (850)
将是我的网格记录总数。
这RN
将是数据的网格索引。
有人可以帮助我实现这一目标吗?
谢谢你的帮助。
[EDIT]
因此,我肯定会在每个 SELECT 上添加一个 ORDER BY。这是我到目前为止得到的:
SELECT * FROM (SELECT ROW_NUMBER()
OVER (ORDER BY ID) AS RN,
COUNT(*) OVER (ORDER BY (SELECT NULL) AS CNT)
Id, Name Phone FROM MyTable WHERE Deleted='F')
T WHERE RN > 100 AND RN < 500;
我走的路对吗?
这对 SQL 来说有多昂贵?