【发布时间】:2014-09-16 10:21:56
【问题描述】:
我正在构建一个网格机制,我需要从数据库中检索找到的总数或记录的数据,只检索其中包含 row_number 的这些记录的范围。
我正在使用 SqlServer 进行测试,但我还需要在 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
CN (850) 将是我的网格总记录数。
RN 将是数据的网格索引。
有人可以帮我完成吗?
感谢您的帮助。
[编辑]
所以,我肯定会在每个 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 来说有多昂贵?
【问题讨论】:
-
这是 MySQL 还是 SQL?语言不一样。
标签: mysql sql-server oracle11g aggregate-functions row-number