上一篇下一篇 排序 (非ID字段排序)

  网上看了很多关于"上一篇下篇"的文章,可大都是按ID排序。

  实际上,很少有按ID排序的。

  分享下我的单独排序字段的写法,主要分为ms sql2000 和 ms 2005及以上版本。 

  SQL 2005及以上版本写法。

 1 declare @currentID int
 2 set @currentID=4
 3 
 4 ;with temp
 5 as
 6 (
 7     select row_number() over( order by short desc , createtime desc) as rowNum, *
 8     from ch_ItemInformation 
 9 )
10 select * from temp where rowNum in ((select rowNum from temp where id=@currentID)+1)
11 union all 
12 select * from temp where rowNum in ((select rowNum from temp where id=@currentID)-1)

SQL 2000写法

 

 1 --前提:排序后要唯一,即排序后不能有两条
 2 declare @Num int
 3 set @Num=1
 4 select @Num=@Num+1 from dbo.ch_ItemInformation
 5 where Short>=0 and ID >=10
 6 order by Short desc, ID desc
 7 
 8 set @Num=@Num+1
 9 select @Num
10 
11 select top 3 * from (
12 select top (select @Num) * from ch_ItemInformation order by Short desc, ID desc
13 ) as a
14 order by a.Short desc, a.ID desc 

     有网友问: 既然使用了row_number() 函数,where 中为何还用in?

     说明下: 只是为了找到ID对应的排序后的排序号. 改成等于号也行. 如下:

declare @currentID int
set @currentID=1 ;with temp as ( select row_number() over( order by short desc , createtime desc) as rowNum, * from dbo.Product ) select * from temp where rowNum = ((select rowNum from temp where id=@currentID)+1) union all select * from temp where rowNum = ((select rowNum from temp where id=@currentID)-1)

转载于:https://www.cnblogs.com/ruyu/p/4253199.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值