在查询上设置列过滤器/条件会打开Access“”输入参数“对话框

时间:2013-04-02 12:04:08

标签: ms-access ms-access-2010

我已经编写了一个包含一些计算字段的查询(这些值是财务状况,每个字段与一年中的某个月相关)例如:

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));

1 个答案:

答案 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]必须是参数,并要求您为该参数提供值。