取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表变量orderbycolumnnamedesc3.selecttopn* from (selecttopm* fromtablenameorderbycolumnname) aorderbycolumnnamedesc4.如果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',true5.如果表里有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)) bwhere a.no=b.no;