假设id为table的主键select top 6 * from (select top 20 * from [table] order by id) order by id desc
取n到m行1. select top m * from tablename where id not in (select top n id from tablename order by id asc/*|desc*/) 2. select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入到临时表 set rowcount n --只取n条结果 select * from 表变量 order by columnname desc 3. select top n * from (select top m * from tablename order by columnname) a order by columnname desc 4.如果tablename里没有其他identity列,那么: 先生成一个序列,存储在一临时表中. select identity(int) id0,* into #temp from tablename 取n到m条的语句为: select * from #temp where id0 > =n and id0 <= m 如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行: exec sp_dboption 你的DB名字,'select into/bulkcopy',true 5.如果表里有identity属性,那么简单: select * from tablename where identity_col between n and m 6.SQL2005开始.可以使用row_number() over()生成行号 ;with cte as ( select id0=row_number() over(order by id),* from tablename ) select * from cte where id0 between n to m
SELECT * FROM (select row_number() over (order by Emp_ID desc) as number, * from table1) t WHERE t.number>=15 and t.number <=20
;with f as ( select id0=row_number() over(order by id),* from tb ) select * from f where id0 between 15 and 20
假设你根据ID来取.--sql 2000 select * from ( select * , px = (select count(1) from tb where id < t.id) + 1 from tb t ) m where px between 15 and 20--sql 2005 select * from ( select * , px = row_number() over(order by id) from tb t ) m where px between 15 and 20
from
(select top 20 * from [table] order by id)
order by id desc
select top m * from tablename where id not in (select top n id from tablename order by id asc/*|desc*/) 2.
select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入到临时表
set rowcount n --只取n条结果
select * from 表变量 order by columnname desc 3.
select top n * from
(select top m * from tablename order by columnname) a
order by columnname desc
4.如果tablename里没有其他identity列,那么:
先生成一个序列,存储在一临时表中.
select identity(int) id0,* into #temp from tablename 取n到m条的语句为:
select * from #temp where id0 > =n and id0 <= m 如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行:
exec sp_dboption 你的DB名字,'select into/bulkcopy',true
5.如果表里有identity属性,那么简单:
select * from tablename where identity_col between n and m 6.SQL2005开始.可以使用row_number() over()生成行号
;with cte as
(
select id0=row_number() over(order by id),* from tablename
)
select * from cte where id0 between n to m
SELECT *
FROM
(select row_number() over (order by Emp_ID desc) as number, * from table1) t
WHERE t.number>=15 and t.number <=20
(
select id0=row_number() over(order by id),* from tb
)
select * from f where id0 between 15 and 20
select * from
(
select * , px = (select count(1) from tb where id < t.id) + 1 from tb t
) m
where px between 15 and 20--sql 2005
select * from
(
select * , px = row_number() over(order by id) from tb t
) m
where px between 15 and 20