2

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

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 期。

然后我有一个最后一列,它将所有这些“Period X ALS”列加起来形成一个“TotalALS”列。[期间 1 ALS]+[期间 2 ALS]+[期间 3 ALS] ...等等。

我的想法是,我会将“>0”放在“TotalALS”列的条件中,因此最终会得到一个查询,该查询会过滤掉所有没有计算出钱的记录。

问题是,只要我将条件 >0 放在“TotalALS”字段中,Access 就会要求我在查询运行之前创建的每个“Period X ALS”列的参数值。

据我了解,Access 在找不到查询中引用的内容时会要求提供参数。我不确定这是怎么回事,因为当我没有指定任何条件时查询运行良好。

我还读到这可能与 Access 误读字段格式有关。所有源字段都是数字(即[Period 1] 和[Period 1 Retention]),所以我假设计算的字段将遵循相同的数字格式。

我在这个查询上运行了 Database Documenter,有趣的是,它在报告的 Query Paramenters 组下列出了我的计算字段,每个字段的类型为“Text”。不确定它如何认为这些字段是文本。

为了看看这是否是我试图明确声明我所谓的“参数”的问题,即将它放在 SQL 的顶部:

PARAMETERS [Period 1 ALS] IEEEDouble, [Period 2 ALS] IEEEDouble, etc...

尽管 Database 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));
4

1 回答 1

2

我的猜测是您的查询将别名分配给字段表达式,然后尝试在WHERE子句中使用这些别名。WHERE在子句中使用非别名字段表达式。

而不是这样的东西......

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]是一个别名,所以在数据库引擎评估WHERE子句时,它不识别别名。因此它假定[Period 1 ALS]必须是一个参数并要求您为该参数提供一个值。

于 2013-04-02T12:14:55.483 回答