目前,我有一条 MS Access 数据库查询,其中有一个名为 FedEXDetTotal 的字段,总共有 9 个 FedEX 费用字段。我还有另一个来自我们内部系统的字段,名为“总费用”。这只是一个普通的数字字段。我在此查询中创建了另一个字段
Diff: [FedEXDetTotal]-[Total Charge]
这告诉我 Fedex 收费和我们实际收费之间的差额。一切正常,但当我尝试将条件 >5 用于 Diff 字段时,当我运行查询时,我收到提示“输入参数值 FedEXDetTotal”。
Access 为什么会这样做?我该如何解决这个问题?我试图从一些简单的事情开始(>5),但我真正想要的是 >[Forms]![Dis].[txtbox_Diff]。
答案1
别名可以在 Jet/ACE SQL 的 SELECT 语句中使用,但不能在 WHERE 子句中使用。
所以,这是可以的:
SELECT FedExDetTotal, [FedEXDetTotal]-[Total Charge] AS Diff
但你不能这样做:
SELECT FedExDetTotal, [FedEXDetTotal]-[Total Charge] AS Diff
FROM Orders
WHERE Diff > 5
相反,您必须重复 WHERE 子句中的所有计算,因此:
WHERE ([FedEXDetTotal]-[Total Charge]) > 5
(括号不是必需的,但要清楚,并且对于某些运算符来说是必需的,例如 * 和 /)
某些数据库的 SQL 方言允许您在 WHERE 子句中使用别名,但我的理解是 Jet/ACE 方式与 SQL 标准完全一致。
事实是,如果您使用 Access 查询生成器编写 SQL,它会为您完成此操作。
答案2
这文章来自 Microsoft 的可能有助于解决您的问题。我假设您的数据库中有一些数据可用于测试该查询。