一道SQL查询的题目
一是查询A(ID,Name)表中第31至40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:
select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A
以上转自:http://www.cnblogs.com/foson/services/trackbacks/435163.aspx
我的语句是:
SELECT a.ID,a.Name
FROM(SELECT ROW_NUMBER() OVER (ORDER BY ID ASC)
rowNum,ID,Name
FROM A) a
WHERE a.rowNum BETWEEN 31 AND 40
或者用top n语句。
这个查询实现的是 Limit n查询,即 从N到M行记录
材料:
ROW_NUMBER() 指定的数字是连续的、唯一的,不管a.ID中是否有重复,这样显示 1,2,(3),4,5,(6),7
RANK()指定的数字是可以既不连续的、也不唯一的,a.id中有重复,这样显示 1,1,(3),4,4,(6),7
DENSE_RANK()连续,不一定唯一,a.id中有重复,这样显示 1,1,(2),3,3,(4),5