sqlite 取得结果集行号的方法

这几天遇到了一个问题,使用sqlite怎样取得结果集的行号?

sqlite中无法使用ROWNUM(),有的网友建议使用rowid。但rowid记录的是原表中的行号,并不是查询结果集的行号。

在网上查了好久也没有找到合适的解决问题方法。

后来终于在一个英文网站上找到了完美解决问题方法,分享出来,希望广大中国网友通过中文也能检索到这个方法。

【问题描述】
有这样一个sqlite database table
rowid | name
-------------
1     | John Doe
2     | Jane Smith
3     | Aaa
4     | Baaaaa
5     | Caa
6     | Dddd
7     | Eeeee
8     | Ffff
9     | Ggggg
10   | Hhhh
11   | Iiiii
12   | Jjj
13   | Kkkk

对该表按照name进行排序,rowid记录的是原表中的实际行号
rowid | name
-------------
3     | Aaa
4     | Baaaaa
5     | Caa
6     | Dddd
7     | Eeeee
8     | Ffff
9     | Ggggg
10   | Hhhh
11   | Iiiii
2     | Jane Smith
12   | Jjj
1     | John Doe
13   | Kkkk

【期望结果】
期望得到查询结果集的逻辑行号,如下面的rowNum
rowid | name         | rowNum
---------------------------
3     | Aaa              | 1
4     | Baaaaa        | 2
5     | Caa              | 3
6     | Dddd            | 4
7     | Eeeee          | 5
8     | Ffff               | 6
9     | Ggggg         | 7
10   | Hhhh            | 8
11   | Iiiii                | 9
2     | Jane Smith  | 10
12   | Jjj                 | 11
1     | John Doe     | 12
13   | Kkkk            | 13

【解决办法】
SELECT
   (SELECT COUNT(*)
    FROM Names AS t2
    WHERE t2.name < t1.name
   ) + (
      SELECT COUNT(*)
      FROM Names AS t3
      WHERE t3.name = t1.name AND t3.id < t1.id
   ) + 1 AS rowNum,
   id,
   name
FROM Names t1
ORDER BY t1.name ASC

原版解答网址:http://stackoverflow.com/questions/14023292/how-to-get-rownum-like-column-in-sqlite-iphone/19199219#19199219


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值