我有一个名为 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/