我在 MS Access 中创建一个查询,需要使用以前记录的总数更新新创建的字段。像这样:
原始表:
| ID | Name |
--------------
| 1 | Mark |
--------------
| 2 | Mich |
--------------
| 3 | Isak |
--------------
现在我添加另一列(类型为int
),例如Ordinal_Number
:
| ID | Name | Ordinal_Number |
-------------------------------
| 1 | Mark | |
-------------------------------
| 2 | Mich | |
-------------------------------
| 3 | Isak | |
-------------------------------
现在我需要填写Ordinal_Number
以前的记录数:
| ID | Name | Ordinal_Number |
-------------------------------
| 1 | Mark | 0 |
-------------------------------
| 2 | Mich | 1 |
-------------------------------
| 3 | Isac | 2 |
-------------------------------
我甚至不知道如何尝试解决这个问题所以我在这里问。
答案 0 :(得分:1)
SELECT a.*, (SELECT COUNT(*) FROM Original_table WHERE a.ID>=ID) as Ordinal_Number
FROM Original_table as a
ORDER BY a.ID
更新:
UPDATE Original_table o
set Ordinal_Number=
(SELECT COUNT(*) FROM Original_table WHERE o.ID>=ID)
或适用于jet4版本
UPDATE Original_table o
inner join
(SELECT a.*, (SELECT COUNT(*) FROM Original_table WHERE a.ID>=ID) as Ordinal_Number
FROM Original_table as a
ORDER BY a.ID) newt
on o.ID=newt.ID
Set o.Ordinal_Number=newt.Ordinal_Number
答案 1 :(得分:0)
为了开始谈论从以前的记录中获取值, 你必须在表的上下文中定义“previous”的含义。对于 大多数用途,Access将表视为“大包的记录”,没有 定义的顺序 - 最具体地说,记录不是固有的排序依据 进入序列。在任何你想谈论“前一个”或 “下一步”记录,您必须为记录指定排序顺序 - for 例如,在查询的ORDER BY子句中。那种排序必须是 根据记录中的数据定义。
如果您需要按照录入顺序处理记录,那么您需要有一个 记录中设置为Now()的记录中的日期/时间字段 进入。如果您的记录具有连续的自动编号主键,则为In 在严格限制的情况下,您可以使用该关键字段作为 进入序列的指标。但是,并非所有表都使用自动编号 密钥,甚至在那些密钥中,自动编号可以变得随机,而不是 在某些情况下连续。所以,如果你关心进入 顺序,你真的应该使用日期/时间字段来存储 信息。
一旦建立了可用于确定序列的字段 记录中,您实际上并不需要存储当前库存总额 任何记录。它总是可以通过累加来计算 通过当前记录输入的所有记录的交易数量。 在某些情况下,为了效率而存储它可能是有用的,但那样做 例如,如果某人修改了数据,则存在数据不一致的风险 其中一个早期的记录没有重新计算所有后续的总数 记录。因此,除非您发现,否则我不建议存储此计算数据 你真的需要。
答案 2 :(得分:0)
序号以0
开头,所以我会这样做:
update Original
set Ordinal_Number = (select count(*)
from Original as o2
where o2.ID <= original.ID
) - 1;