为什么 DataType Number 在 MS Access Append (INSERT INTO) 查询中递增?

Why does DataType Number increment inside MS Access Append (INSERT INTO) query?

我运行正在使用 MS Access 遇到令人费解的故障。当我 运行 在数据类型为 Number 的 table 上追加查询时,它没有将查询的值分配给单元格,而是按查询的值递增数字。这是我的代码..

INSERT INTO Billing ( BillDate, BillAmount, NumActive )
SELECT #8/14/2018# AS Expr1, 100 AS Expr2, Sum(IIf([Members].[Active]=Yes,1,0)) AS Expr3
FROM Members, Billing;

基本上,我是在统计一段时间内的活跃会员数量(目前刚好是34个会员),这样我就可以平分账单了。但是,当我 运行 查询时,从一个空的 Billing table 开始,我每次都会得到以下结果:

我预计每次都会插入 34 个,因为活跃成员的数量没有变化。知道为什么这可能会这样运作吗?

BillingID 是自动编号,PerPerson 列是计算所得。目前,我正在对日期和金额进行硬编码,但最终都将通过表格填充。

您的查询正在计算活跃成员的数量 x 次,其中 x 是 Billing table 中的记录数。发生这种情况是因为您的查询 "cross joins" MembersBilling table(创建两个 table 的所有可能的记录组合)。为避免这种情况,请从查询的 FROM 子句中删除 Billing table:

INSERT INTO Billing ( BillDate, BillAmount, NumActive )
SELECT #8/14/2018# AS Expr1, 100 AS Expr2, Sum(IIf([Members].[Active]=Yes,1,0)) AS Expr3
FROM Members;

您想要 INSERT 单行。 INSERT ... VALUES 形式在这里对我来说更有意义。

INSERT INTO Billing ( BillDate, BillAmount, NumActive )
VALUES (#8/14/2018#, 100, DCount('*', 'Members', '[Active]=Yes'))

如果您的问题是查询设计器将其转换为 INSERT ... SELECT 形式,请在不使用 FROM 的情况下执行此操作,因为您不想添加与 [=] 中存在的行一样多的行17=] 或 Billing,而且肯定没有这两个 table 的笛卡尔积中的行数多。

INSERT INTO Billing ( BillDate, BillAmount, NumActive )
SELECT #8/14/2018# AS Expr1, 100 AS Expr2, DCount('*', 'Members', '[Active]=Yes') AS Expr3;

如果出于任何原因您无法离开 FROM,请使用 table 或查询哪个 returns 只有一行。我使用自定义 table、Dual,它保证只能容纳一行。

INSERT INTO Billing ( BillDate, BillAmount, NumActive )
SELECT #8/14/2018# AS Expr1, 100 AS Expr2, DCount('*', 'Members', '[Active]=Yes') AS Expr3
FROM Dual;

作为使用 的替代方法,您可以使用标准 SQL COUNT 函数:

INSERT INTO Billing ( BillDate, BillAmount, NumActive )
SELECT #8/14/2018# AS Expr1, 100 AS Expr2, COUNT(*) AS Expr3
FROM Members
WHERE Active = Yes;

因为没有 GROUP BY 子句的 SQL 语句和 COUNT 函数只会 return 一行。