一、sql行号显示与排序
1、sql server的行号
a.sql 2000使用identity(int,1,1)和临时表,可以显示行号
复制代码 代码示例:
select
identity(int,1,1) as rownum,
[dataid]
into #1
from datas
order by dataid;
select * from #1
b.sql 2005函数row_number(),可以直接用来显示行号。
也可以使用sql 2000的identity
复制代码 代码示例:
select
row_number()over(order by dataid) as rownum,
[dataid]
from datas;
这里如果添加排序功能,则先排序再添加行号。
2.oracle的行号显示
使用rownum
复制代码 代码示例:
select
rownum,
[dataid]
from datas
order by dataid
注意:先加行号再排序,如果想排序好再加行号就要使用子查询
3.取前n条数据
a.sql版
复制代码 代码示例:
select top n [dataid] from datas
b.oracle版
复制代码 代码示例:
select
[dataid]
from datas where rownum<=n
其中,n>=1
oracle的rownum不能应用于大于,只能 rownum= 1, 或者<= 大于1 的自然数
二,sql分页查询几种方式
以每页10条数据为例,查询第三页数据,即21-30这些记录
1,分页方案一:(利用not in和select top分页)
语句形式:
复制代码 代码示例:
select top 10 *
from datas
where dataid not in
(select top 20 dataid
from datas
order by dataid)
order by dataid
2、分页方案二:(利用id大于多少和select top分页)
语句形式:
复制代码 代码示例:
select top 10 *
from datas
where id >
(select max(dataid)
from (select top 20 dataid
from datas
order by dataid) as t)
order by dataid
3,分页方案三
复制代码 代码示例:
select top 10 dataid from
(select top 30
[dataid]
from datas
order by dataid desc) a
order by dataid
4,分页方案四:(利用sql的游标存储过程分页)
复制代码 代码示例:
create procedure sqlpager
@sql nvarchar(8000), --查询字符串
@curpage int, --第n页
@pagesize int --每页行数
as www.2cto.com
set nocount on
declare @p int, --p是游标的id
@rowcount int
exec sp_cursoropen @p output,@sql,@scrollopt=1,@ccopt=1, @rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数,@rowcount as 总行数,@curpage as 当前页
set @curpage=(@curpage-1)*@pagesize+1
exec sp_cursorfetch @p,16,@curpage,@pagesize
exec sp_cursorclose @p
set nocount off