2

私のテーブルの 1 つに、 という名前Costのフィールドと という名前のフィールドがありExtra Costます。を考え出すために、Total Costそれらを次のフィールドと一緒に追加します。これは問題なく機能します。

Total Cost: (Val(nz([Cost],"")))/100 + (Val(nz([Extra Cost],"")))/100

( とは小数点なしで格納されるためCost、100 で除算します)Extra Cost

Costこれで、レコードに= 0 とExtra Cost> 0が含まれる可能性があります。ただし、 Cost= 0 の場合は、= 0 も使用したいです。Total Cost次のように考えましたが、結果は#Errorif Cost= 0 になりCostます。> 0の場合は正常に動作します。

Total Cost: IIf([Cost]>0,((Val(nz([Cost],"")))/100+(Val(nz([Extra Cost],""))))/100,0)

基本的に私は探しています:

If Cost = 0, Then Total Cost = 0
Else
If Cost > 0, Then Total Cost = Cost + Extra Cost

「真の」部分の何が問題になっていますか?

以下に、データの例をいくつか示します。

Cost    Extra Cost
100     2.5
250     1.5
150     2.5
null    2.75
4

1 に答える 1

1

あなたの説明に基づいて、2つの値を追加する前にそれぞれを100で割る代わりに、2つの値を追加した後に100で割ることができると思います。それはロジックに影響を与えるべきではありませんが、より単純なIIf式を提供するはずです...これにより、診断が容易になることが期待されます。

IIf
    (
        Val(Nz([Cost], "0")) > 0,
        (Val([Cost]) + Val(Nz([Extra Cost], "0"))) / 100,
        0
    )

Access 2007 でサンプル データを使用して、次のクエリからこの結果セットを取得します。

Cost Extra Cost Total Cost
100  2.5             1.025
250  1.5             2.515
150  2.5             1.525
     2.75                0

SELECT
y.Cost,
y.[Extra Cost],
IIf
    (
        Val(Nz([Cost], "0")) > 0,
        (Val([Cost]) + Val(Nz([Extra Cost], "0"))) / 100,
        0
    ) AS [Total Cost]
FROM YourTable AS y;

問題が[Total Cost]テキスト値を必要とする場合は、数値を文字列CStr()にキャストするために使用できます。IIf

CStr(
    IIf
        (
            Val(Nz([Cost], "0")) > 0,
            (Val([Cost]) + Val(Nz([Extra Cost], "0"))) / 100,
            0
        )
    )
于 2013-09-30T15:33:44.027 に答える