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] ...など。

アイデアは、"TotalALS" 列の条件に ">0" を入れて、金額が計算されていないすべてのレコードを除外するクエリになるというものです。

問題は、"TotalALS" フィールドに対して基準 >0 を設定するとすぐに、クエリを実行する前に、作成した "Period X ALS" 列ごとに Access がパラメーター値を要求することです。

私が理解していることから、クエリで参照されているものが見つからない場合、Access はパラメーターを要求します。条件を指定しないとクエリが正常に実行されるため、これがどのように当てはまるかはわかりません。

また、Access がフィールドの形式を読み間違えている可能性があることも読みました。すべてのソース フィールドは数値 (つまり、[期間 1] と [期間 1 保持]) であるため、計算フィールドは同じ数値形式に従うと想定します。

このクエリで Database Documenter を実行したところ、興味深いことに、計算フィールドがレポートのクエリ パラメータ グループの下にリストされ、それぞれのタイプが「テキスト」でした。ただし、これらのフィールドがテキストであるとどのように考えることができるかはわかりません。

これが問題であるかどうかを確認するために、いわゆる「パラメーター」を明示的に宣言しようとしました。つまり、これを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]エイリアスであるため、db エンジンがWHERE句を評価するときにエイリアスを認識しないことです。したがって、パラメータである必要があると想定し[Period 1 ALS]、そのパラメータの値を指定するように求めます。

于 2013-04-02T12:14:55.483 に答える