我已经编写了一个包含一些计算字段的查询(这些值是财务状况,每个字段与一年中的某个月相关)例如:
Period 1 ALS: [Period 1]-[Period 1 Retention]
Period 2 ALS: [Period 2]-[Period 2 Retention]
Period 3 ALS: [Period 3]-[Period 3 Retention]
...依此类推至第12期。
然后我有一个最后一栏,将所有这些加起来"期间X ALS"用于制作" TotalALS"的列柱。 [期间1 ALS] + [期间2 ALS] + [期间3 ALS] ......依此类推。
我的想法是,我会把"> 0"在" TotalALS"的标准中列等等最后会有一个查询过滤掉所有没有计算金钱的记录。
问题是,只要我将标准> 0放在" TotalALS"字段,Access要求每个"期间X ALS"我在查询运行之前创建的列。
根据我的理解,当Access无法找到查询中引用的内容时,Access会询问参数。我不确定这是怎么回事,因为当我没有指定任何标准时查询运行正常。
我还读到可能与Access误读字段的格式有关。所有源字段都是数字(即[期间1]和[期间1保留]),因此我假设计算字段将遵循相同的数字格式。
我在此查询上运行了数据库文档管理器,有趣的是它列出了我在报告的查询参数组下的计算字段,每个字段都有Type" Text"。不知道如何认为这些字段是文本。
为了查看这是否是问题,我试图明确声明我所谓的"参数"即把它放在SQL的顶部:
PARAMETERS [Period 1 ALS] IEEEDouble, [Period 2 ALS] IEEEDouble, etc...
虽然数据库Dcoumenter报告显示每个字段都是我现在指定的数字格式,但我仍然得到"输入参数值"当我实际尝试运行查询时弹出窗口。
略微缩写的SQL:
SELECT
[T_FM45_PeriodConversion03-ALS].[Period 1],
[Period 1]*[Partner Rate]) AS [Period 1 Retention],
[Period 1]-[Period 1 Retention] AS [Period 1 ALS],
以上3个领域重复了一年中的2至12期。然后我的TotalALS字段:
[Period 1 ALS]+[Period 2 ALS]+[Period 3 ALS]+[Period 4 ALS]+[Period 5 ALS]+[Period 6 ALS]+[Period 7 ALS]+[Period 8 ALS]+[Period 9 ALS]+[Period 10 ALS]+[Period 11 ALS]+[Period 12 ALS] AS TotalALS,
INTO [T_FM45_PeriodConversion04-ALS]
FROM [T_FM45_PeriodConversion03-ALS] LEFT JOIN Partners ON [T_FM45_PeriodConversion03-ALS].PartnerAbbr = Partners.Abbreviation
WHERE ((([Period 1 ALS]+[Period 2 ALS]+[Period 3 ALS]+[Period 4 ALS]+[Period 5 ALS]+[Period 6 ALS]+[Period 7 ALS]+[Period 8 ALS]+[Period 9 ALS]+[Period 10 ALS]+[Period 11 ALS]+[Period 12 ALS])>0));
答案 0 :(得分:2)
我的猜测是你的查询为字段表达式分配别名,然后尝试在WHERE
子句中使用这些别名。在WHERE
子句中使用unaliased字段表达式。
而不是像这样......
SELECT (fld2 - fld1) AS difference
FROM MyTable
WHERE difference > 0;
使用此...
SELECT (fld2 - fld1) AS difference
FROM MyTable
WHERE (fld2 - fld1) > 0;
您的查询中存在该模式。在您的SELECT
列表中,您有...
SELECT ..., [Period 1]-[Period 1 Retention] AS [Period 1 ALS], ...
然后在WHERE
条款中,你有......
WHERE ((([Period 1 ALS]+ ...
问题是[Period 1 ALS]
是别名,因此在db引擎评估WHERE
子句时,它不识别别名。因此,它假定[Period 1 ALS]
必须是参数,并要求您为该参数提供值。