代码之家  ›  专栏  ›  技术社区  ›  Johannes Rudolph

SQL更新每个记录及其在有序选择中的位置

  •  1
  • Johannes Rudolph  · 技术社区  · 16 年前

    我正在通过OLEDB使用Access。我有一个表,列id、groupid、时间和位置。应用程序将新记录插入到表中,不幸的是,该位置的计算不正确。

    我想根据时间升序更新一个组中每个记录的正确位置。

    所以假设以下数据:

    ID     GroupId  Time   Place
    Chuck  1        10:01  2
    Alice  1        09:01  3
    Bob    1        09:31  1
    

    应导致:

    ID     GroupId  Time   Place
    Chuck  1        10:01  3
    Alice  1        09:01  1
    Bob    1        09:31  2
    

    我可以用光标找到一个解决方案,但在Access中这是不可能的。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Codesleuth    16 年前

    我刚搜索了一下“访问排名”,然后 this support.microsoft result .

    您似乎创建了一个带有以下表达式的字段的查询:

    Place: (Select Count(*) from table1 Where [Time] < [table1alias].[Time]) + 1
    

    我不能测试这个,所以我希望它能工作。 使用这个你可以做(在哪里 queryAbove 是上面的查询):

    UPDATE table1
    SET [Place] = queryAbove.[Place]
    FROM queryAbove
    WHERE table1.ID = queryAbove.ID
    

    这是一个远射,但请试一试。

        2
  •  0
  •   anonymousB    16 年前

    我不认为时间是数字或时间格式的列,很遗憾时间是一个包含数字和时间格式的dilitimes的文本字符串。这就是为什么在时间列之后排序是非法的。删除dilimiter“:”和“,”强制转换为整数,然后进行数字排序,就可以完成这项工作。