2012-05-04 10 views
1

Accessのクエリ設計でORステートメントを作成しようとしていますが、動作していません!以下 statementis:アクセスクエリ条件付きの場合

Duration:If([Status2]="Q","2.5 Hours",IIf([Status2]=WS,"4 Hours", IIf([Status2]=MG,"3 Hours 15 Mins",IIf([Status2]=ID,"3.5 Hours"))))

+1

これは機能していないとはどういう意味ですか? OR式を書くことができない、または式を書くことができますが、正しい結果が得られないということですか? –

答えて

0

それがあなたのアクセスのデータベースから直接コピーである場合は、最初にオンの場合、私が欠けています。 IFではなくIIFでなければなりません。

1

Zaider89が指摘しているように、最初のIIf()からIを削除しました。

また、[Status2]と4つの異なる値を比較しています。Q; WS; MG; ID。これらの値の最初の値は引用符で囲みますが、他の値は囲まないでください。これは、dbエンジンが引用符で囲まれていない値をパラメータとして扱い、WS、MG、およびIDの値を指定するよう求めていると思わせます。あなたはこれらの問題を解決することができ

IIf([Status2]=ID,"3.5 Hours") 

が、私はあなたの代わりにSwitch Functionを使用することを検討してお勧め:

あなたIIf()式の最後には、「真の部」が、ノー「偽の一部」を含みます。 IIf()試行の横の列にあるクエリデザイングリッドの次の行を1行で試してみてください。

Duration:Switch([Status2]="Q","2.5 Hours", 
[Status2]="WS","4 Hours", 
[Status2]="MG","3 Hours 15 Mins", 
[Status2]="ID","3.5 Hours") 

そのSwitch()のアプローチが私には良く見えます。しかし、私はまだ[Status2]のための1つの列とマップされた値の別のルックアップテーブルを作成する方が良いと思う。次に、そのテーブルをクエリに結合します。テーブルを作成した後は、クエリで簡単に使用できます。Switch()や入れ子になったIIf()の式を使用するアプローチよりも理解しやすいと思います。新しい条件を追加する必要がある場合は、ルックアップテーブルの行として追加するだけで簡単に拡張できます。

関連する問題