取n到m行
1.
selecttopm*fromtablenamewhereidnotin(selecttopn idfromtablenameorderbyidasc/*|desc*/)
如果是采用循环,每次只取n行这一行的话,n=1,2,3……:
selecttop n*fromtablenamewhereidnotin(selecttopn idfromtablenameorderbyidasc/*|desc*/)
注意:n=1或n=0,都查不到top 1这行信息,所以要做case语句,当n=0时,只查找top 1,当n=1时,就采用上面的语句!
2.
selecttopm*into临时表(或表变量)fromtablenameorderbycolumnname--将top m笔插入到临时表
setrowcountn --只取n条结果
select*from表变量orderbycolumnnamedesc
3.
selecttopn* from
(selecttopm* fromtablenameorderbycolumnname) aorderbycolumnnamedesc
4.如果tablename里没有其他identity列,那么:
先生成一个序列,存储在一临时表中.
selectidentity(int) id0,*into#tempfromtablename
取n到m条的语句为:
select*from#tempwhereid0>=nandid0 <=m
如果你在执行selectidentity(int) id0,*into#tempfromtablename这条语句的时候报错,那是因为你的DB中间的selectinto/bulkcopy属性没有打开要先执行:
execsp_dboption 你的DB名字,'select into/bulkcopy',true
5.如果表里有identity属性,那么简单:
select*fromtablenamewhereidentity_colbetweennandm
6.SQL2005开始.可以使用row_number()over()生成行号
;withcteas
(
selectid0=row_number()over(orderbyid),*fromtablename
)
select*fromctewhereid0betweenntom
来自于:http://topic.csdn.net/u/20090401/18/24a3365d-6221-4f49-abce-35a103ef4626.html
下面放个小例子:【是关于rownum 的例子】sql2000中无法运用,sql2005有row_number()
在Oracle8i,如何用SQL语句实现:查询某字段的下一行记录值减上一行记录值的差?
如有表如下:
单位编号 收入
````````````````````````````````
001 5000
002 6000
003 5600
...
想得到如下:
单位编号 差
````````````````````````````````
001 5000 //头行记录为原值
002 1000 //6000-5000=1000
003 -400 //5600-6000=-400
...
--try;
select a.单位编号,a.收入-b.收入 差 from
(
select rownum no,单位编号,收入 from tb
) a,
(
select rownum no,单位编号,收入 from (select '000 ' 单位编号,0 收入 from dual union all
select 单位编号,收入 from tb)
) b
where a.no=b.no;