查询结果中,如何取指定行的前10行和后10行的数据? ( 积分: 24 )

C

cnhotel

Unregistered / Unconfirmed
GUEST, unregistred user!
按条件查询出来的记录有100条,我想取指定行的前10行和后10行,比如指定第30行,也就是要取出第20行到第40行间的数据改如何取呢?其中有ID标识<br><br>这里我并不知道第30行的ID是什么,所以用betwwen、where&nbsp;id&gt;=xx&nbsp;and&nbsp;id&lt;=xx之类的方法行不通....<br><br>第20行到第40行间的数据取出来应该是21行
 
你测试这样的看看?<br>select&nbsp;top&nbsp;21&nbsp;*&nbsp;from&nbsp;tablename&nbsp;where&nbsp;id&nbsp;not&nbsp;in&nbsp;(&nbsp;select&nbsp;top&nbsp;20&nbsp;&nbsp;id&nbsp;from&nbsp;tablename&nbsp;order&nbsp;by&nbsp;id&nbsp;)&nbsp;order&nbsp;by&nbsp;id
 
zywcd是正确的。
 
因为没有数据库我感觉zywcd的答案在sqlserver等大型数据库上应该没有问题,可能在小型数据库中会有问题。<br>楼主尽量不要在逻辑上用这种方法,多想想你的业务逻辑,尽量用简单的sql完成。
 
用AdoDataSet查询出你要的数据<br>I&nbsp;:=&nbsp;30;<br>for&nbsp;j&nbsp;:=&nbsp;0&nbsp;to&nbsp;Pred(AdoDataSet.RecordCount)&nbsp;do<br>begin<br>&nbsp;&nbsp;if&nbsp;j&gt;i+10&nbsp;then&nbsp;break;<br>&nbsp;&nbsp;if&nbsp;j&lt;i-10&nbsp;then&nbsp;continue;<br>&nbsp;&nbsp;剩下的就是你要的数据了。。。<br>end;
 
如果数据表本身并不内含自动地增编号的字段时,要怎么做才能够让SELECT&nbsp;查询结果额外增加自动递增序号呢?我们提供下列五种方法供您参考:<br><br>USE&nbsp;北风贸易;<br>GO<br><br>/*&nbsp;方法一*/<br><br>SELECT&nbsp;序号=&nbsp;(SELECT&nbsp;COUNT(客户编号)&nbsp;FROM&nbsp;客户&nbsp;AS&nbsp;LiMing<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;LiMing.客户编号&lt;=&nbsp;Chang.客户编号),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户编号,&nbsp;公司名称<br>FROM&nbsp;客户&nbsp;AS&nbsp;Chang&nbsp;ORDER&nbsp;BY&nbsp;1;<br>GO<br><br>/*&nbsp;方法二:&nbsp;使用SQL&nbsp;Server&nbsp;2005&nbsp;独有的RANK()&nbsp;OVER&nbsp;()&nbsp;语法*/&nbsp;<br>SELECT&nbsp;RANK()&nbsp;OVER&nbsp;(ORDER&nbsp;BY&nbsp;客户编号&nbsp;DESC)&nbsp;AS&nbsp;序号,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;客户编号,&nbsp;公司名称<br>FROM&nbsp;客户;<br>GO<br><br>/*&nbsp;方法三*/<br>SELECT&nbsp;序号=&nbsp;COUNT(*),&nbsp;LiMing.客户编号,&nbsp;LiMing.公司名称<br>&nbsp;&nbsp;&nbsp;FROM&nbsp;客户&nbsp;AS&nbsp;LiMing,&nbsp;客户AS&nbsp;Chang<br>&nbsp;&nbsp;&nbsp;WHERE&nbsp;LiMing.客户编号&gt;=&nbsp;Chang.客户编号<br>&nbsp;&nbsp;&nbsp;GROUP&nbsp;BY&nbsp;LiMing.客户编号,&nbsp;LiMing.公司名称<br>&nbsp;&nbsp;&nbsp;ORDER&nbsp;BY&nbsp;序号;<br>GO<br><br>/*&nbsp;方法四<br>建立一个「自动编号」的字段,然后将数据新增至一个区域性暂存数据表,<br>然后由该区域性暂存数据表中,将数据选取出来,最后删除该区域性暂存数据表<br>*/<br>SELECT&nbsp;序号=&nbsp;IDENTITY(INT,1,1),&nbsp;管道,&nbsp;程序语言,&nbsp;讲师,&nbsp;资历<br>INTO&nbsp;#LiMing<br>FROM&nbsp;问券调查一;<br>GO<br>SELECT&nbsp;*&nbsp;FROM&nbsp;#LiMing;<br>GO<br>DROP&nbsp;TABLE&nbsp;#LiMing;<br>GO<br><br>/*<br>方法五<br>使用&nbsp;SQL&nbsp;Server&nbsp;2005&nbsp;独有的ROW_NUMBER()&nbsp;OVER&nbsp;()&nbsp;语法<br>搭配&nbsp;CTE&nbsp;(一般数据表表达式,就是&nbsp;WITH&nbsp;那段语法)选取序号2&nbsp;~&nbsp;4&nbsp;的数据<br>*/<br>WITH&nbsp;排序后的图书&nbsp;AS<br>&nbsp;&nbsp;(SELECT&nbsp;ROW_NUMBER()&nbsp;OVER&nbsp;(ORDER&nbsp;BY&nbsp;客户编号&nbsp;DESC)&nbsp;AS&nbsp;序号,<br>&nbsp;&nbsp;&nbsp;客户编号,&nbsp;公司名称<br>&nbsp;&nbsp;&nbsp;FROM&nbsp;客户)<br>SELECT&nbsp;*&nbsp;FROM&nbsp;排序后的图书<br>WHERE&nbsp;序号&nbsp;BETWEEN&nbsp;2&nbsp;AND&nbsp;4;<br>GO
 

Similar threads

S
回复
0
查看
746
SUNSTONE的Delphi笔记
S
S
回复
0
查看
696
SUNSTONE的Delphi笔记
S
S
回复
0
查看
955
SUNSTONE的Delphi笔记
S
顶部 底部