【问题标题】:How to select records with order id in SQLite如何在 SQLite 中选择具有订单 ID 的记录
【发布时间】:2013-09-24 14:09:43
【问题描述】:

我有一个按字母顺序选择数据的查询。例如:

ID |TITLE
6  |A
35 |AA
3  |B
87 |BB
...

我还想选择记录的order idorder id 它不是数据库中的实际列)。所以结果应该是这样的:

ID |ORDER ID |TITLE
6  |0        |A
35 |1        |AA
3  |2        |B
87 |3        |BB
...

我怎样才能实现这样的目标?我可以在 while 循环中检查每条返回的记录,我会在每次迭代时增加一个计数器,但这并不是我真正想要做的,我宁愿把它留在数据库中。

【问题讨论】:

    标签: sql sqlite select


    【解决方案1】:

    这是其他数据库引擎中的一种RANK 函数。

    在 SQLite 中,你可以这样实现:

    SELECT ID, (SELECT COUNT() FROM table AS t WHERE Title<table.Title), Title FROM table;
    

    dense_rank and sqlite - possible?

    编辑:不同的订单号:

    SELECT ID, (SELECT COUNT() FROM table AS t WHERE Title<table.Title OR Title=table.Title AND ROWID<table.ROWID), Title FROM table;
    

    【讨论】:

    • 您好,我试过了,但不能正常工作。我已经测试了您的查询,它返回的值绝对错误 + 我尝试在查询末尾添加“ORDER BY 标题”,因为我需要它,它返回的值为 0、1、1、1、1、1、 1、11、11、11、11、11、30、30、30 等...
    • 那是因为你有重复的名字。它可以解决,但你没有给出如何处理的指令。
    • 排序是由 "ORDER BY ..." 进行的,所以如果我有与 (A, A, A, A, B, C, D) 重复/相同的值,我需要它们经典顺序为 (0, 1, 2, 3, 4, 5, 6)。有哪些值并不重要......它们已排序,我需要一些索引。然后我必须选择例如 ID 为 234 的项目,例如第三个“A”,它将返回我的订单 ID“2”。
    • 这是一个新问题!创建一个新的!
    【解决方案2】:

    类似这样的:

    SELECT * FROM yourtable WHERE id = 3 ORDER BY title
    

    这将返回 yourtable 中 id 列为 3 的所有字段(id、订单 id、标题)

    编辑添加: 来自评论的附加信息 - 在结果集中包含 order_id,但不包含在表中。为此,您可以添加一个常量并为该列添加别名,如下所示:

    SELECT id, '999' AS order_id, title FROM yourtable WHERE id = 3 ORDER BY title
    

    这将返回一个 order_id 列,其值为 999。

    【讨论】:

    • 在我的表中,我没有任何名为 (order_id) 的列。我想在 SELECT 查询中设置它,因为它在每个选择查询中都可能不同。它必须是从 0 到 XXX。
    • 看看我编辑的答案,我仍然不是 100% 清楚你在问什么,但这是我对问题的解释
    • 您好,您的示例返回 order_id '999' ,但我需要真正的 order_id ,这意味着上面示例中的数字 2。例如,如果我为“A”获得了一个值,那么字母“B”会更远,因此它的 order_id 为 3。基本上我必须按字母顺序对 select 查询中的项目进行排序,并且每个项目都必须有一些索引。第一项有 0,第二项有 1,第三项有 2 等等......我不知道如何解释它不同。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    相关资源
    最近更新 更多