SQL - Access 条件更新

标签 sql ms-access

我有一个名为 POS_File_Detail 的表。我想根据 Line_Number 的计数更新 Invoice_Number 并为每个重复增加 1。所以基本上,如果我有三个具有相同 Invoice_Number 的重复条目,它将用它是什么重复编号更新 Line_Number。像这样的东西

    Invoice_Number | Line_Number | Description
    0123456          1             Pepsi
    0123456          2             Chips
    0123499          1             Hot dogs
    0123456          3             Mustard

该表的主键是一个名为 Record_ID 的自动编号字段。

我不确定如何以正确的语法使用它,但希望这会告诉你我正在尝试做什么
    UPDATE POS_File_Detail 
    SET POS_File_Detail.Line_Number = Line_Number +1
    WHERE COUNT(Invoice_Number)>1;

最佳答案

如果您有一个字段或字段组合允许您定义重复的 Invoice_Number 值的顺序,这将非常容易。如果没有这样的方法,检索这些 Invoice_Number 值的顺序是任意的。

您有一个名为“Record_ID”的自动编号字段作为 POS_File_Detail 主键。

SELECT
    Invoice_Number,
    DCount("*", "POS_File_Detail",
        "Invoice_Number = '" & [Invoice_Number] & 
        "' AND Record_ID <= " & [Record_ID]) AS Line_Number
FROM POS_File_Detail;

尽管您要求将 Line_Number 存储在 POS_File_Detail 中,但我给了您一个 SELECT 语句。我这样做是因为在表中存储派生值几乎总是一个错误。最好在需要时通过查询导出 Line_Number。这样您就可以避免存储冗余数据并确保 Line_Number 始终是最新的,尽管对 POS_File_Detail 进行了插入、更新和删除。

然而如果 您有充分的理由将 Line_Number 实际存储在 POS_File_Detail 中,您可以将 SELECT 转换为 UPDATE 语句。
UPDATE POS_File_Detail
SET Line_Number = DCount("*", "POS_File_Detail",
    "Invoice_Number = '" & [Invoice_Number] &
    "' AND Record_ID <= " & [Record_ID]);

请确保您确实有令人信服的理由来存储这些值。

关于SQL - Access 条件更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9980142/

相关文章:

SQL:Not Like 产生的结果与 Like 的相反结果不同

vba - VBA中判断一个对象是否是集合的成员

MySQL:三个相互关联的表

mysql - 具有动态字段的查询表

database - 尝试使用查找在 VBA 中查找字段

database - 您可以将 .accdr 文件转换为 .accdb 吗?

SQL Server 2008索引碎片问题

sql - 扭曲的adbapi : number affected rows and last insert id

mysql - 查找仅包含给定成分的食谱的匹配行

c# - # 在 SQL 查询中