sql查询指定的某行!

取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#tempfrom
tablename

取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_colbetweennand


6.SQL2005开始.可以使用row_number()over
()生成行号
;withcteas

(
selectid0=row_number()over(orderbyid),*fromtablename
)
select*fromctewhereid0betweennto
m
来自于:
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;

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值