SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)

行号显示和排序 1.SQL Server的行号 A.SQL
二零零二利用identity(int,1,1卡塔尔(قطر‎和临时表,能够来得行号 SELECT identity(int,1,1卡塔尔AS ROWNUM, [DataID] INTO #1 FROM DATAS order by DataID; SELECT *
FROM #1 B.SQL 二〇〇六提供三个很好用的函数row_number(卡塔尔国,
可以直接用来展现行号,当然也足以选择SQL 二〇〇二的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 的自然数
www.463.com,(二State of QatarSQL分页的两种方式
以每页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的游标存款和储蓄进程分页State of Qatar 复制代码 代码如下: create procedure SqlPager
@sql nvarchar(8000卡塔尔(قطر‎, –查询字符串 @curpage int, –第N页 @pagesize int
–每页行数 as 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
方法收拾如下: 代码基于pubs样板数据库 在SQL中,日常就那二种方法.
1.应用一时表 能够动用select into
成立一时表,在首先列,参加Identify(int,1,1卡塔尔作为行号,
那样在发生的有的时候表中,结果集就有了行号.也是日前成效最高的方法.
这种措施无法用来视图 复制代码 代码如下:
set nocount on select IDentify(int,1,1卡塔尔(قطر‎ ‘RowOrder’,au_lname,au_fname
into #tmp from authors select * frm #tmp drop table #tmp
2.施用自连接
不用有时表,在SQL语句中,动态的开展排序.这种艺术用到的连续几日是自连接,连接关系平常是
大于, 复制代码 代码如下: select
rank=count(*), a1.au_lname, a1.au_fname from authors a1 inner join
authors a2 on a1.au_lname + a1.au_fname = a2.au_lname + a2.au_fname
group by a1.au_lname, a1.au_fname order by count(*State of Qatar 运维结果: rank
au_lname au_fname ———– —————————————-
——————– 1 Bennet 亚伯拉罕 2 Blotchet-Halls Reginald 3 Carson
Cheryl 4 DeFrance Michel 5 del Castillo Innes 6 Dull Ann 7 Greene
Morningstar … …. 劣势:
1.运用自联接,所以该方式不适用于管理多量行。它适用于处理几百行。
对于大型表,必必要使用索引以幸免进行大面积的寻觅,或用第一种方法.
2.不能够健康处理重复值。当超重复值时,会并发不总是的行编号。
要是不期望现身这种光景,可以在原子钟格中插入结果时隐蔽排系列,而是使用钟表格编号。
或用第一种艺术 优点: 这一个查询可以用来视图和结果格式设置中
在结果聚焦插入了行号,今后就足以将结果集结缓存起来,然后利用DataView,参预过滤条件
RowNumPageIndex*PageSize And RowNum=(PageIndex+1)*PageSize
就可以落到实处快捷的分页,而且不论是你的页面数据绑定控件是怎么着。
假如你利用的是DataGrid,那么提议不要采纳这种手艺。因为DataGrid的分页功用和它基本上。

发表评论

电子邮件地址不会被公开。 必填项已用*标注