sql行号排序与sql分页查询语句示例

发布时间:2020-06-07编辑:脚本学堂
有关sql行号显示与排序的方法,以及sql分页查询语句的用法,sql分页代码的四种方案,需要的朋友参考下。

一、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