为什么 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 开始,我每次都会得到以下结果:
- 运行 1: Billing.NumActive = 空
- 运行 2: Billing.NumActive = 34
- 运行 3: Billing.NumActive = 68
- 运行 4: Billing.NumActive = 102
我预计每次都会插入 34 个,因为活跃成员的数量没有变化。知道为什么这可能会这样运作吗?
BillingID 是自动编号,PerPerson 列是计算所得。目前,我正在对日期和金额进行硬编码,但最终都将通过表格填充。
您的查询正在计算活跃成员的数量 x 次,其中 x 是 Billing
table 中的记录数。发生这种情况是因为您的查询 "cross joins" Members
和 Billing
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 一行。
我运行正在使用 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 开始,我每次都会得到以下结果:
- 运行 1: Billing.NumActive = 空
- 运行 2: Billing.NumActive = 34
- 运行 3: Billing.NumActive = 68
- 运行 4: Billing.NumActive = 102
我预计每次都会插入 34 个,因为活跃成员的数量没有变化。知道为什么这可能会这样运作吗?
BillingID 是自动编号,PerPerson 列是计算所得。目前,我正在对日期和金额进行硬编码,但最终都将通过表格填充。
您的查询正在计算活跃成员的数量 x 次,其中 x 是 Billing
table 中的记录数。发生这种情况是因为您的查询 "cross joins" Members
和 Billing
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;
作为使用 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 一行。