欢迎投稿

今日深度:

sqlite 取得结果集行号的方法,sqlite行号

sqlite 取得结果集行号的方法,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


www.htsjk.Com true http://www.htsjk.com/SQLite/35854.html NewsArticle sqlite 取得结果集行号的方法,sqlite行号 这几天遇到了一个问题,使用sqlite怎样取得结果集的行号? sqlite中无法使用ROWNUM(),有的网友建议使用rowid。但rowid记录的是原表中的行号,并不...
相关文章
    暂无相关文章
评论暂时关闭