web-dev-qa-db-ja.com

Accessのケース式

Accessでcase式を使用できますか?私は最大日付フォーム2列を決定しようとしていますが、次のコードで構文エラーを取得し続けます:

CASE 
  WHEN dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date]
    THEN dbo_tbl_property.LASTSERVICEDATE 
  ELSE Contour_dates.[Last CP12 Date] 
END AS MaxDate
35
elphj

代わりにIIF()関数を使用できます。

IIF(condition, valueiftrue, valueiffalse)
  • conditionは、テストする値です。

  • valueiftrueは、条件がTRUEと評価された場合に返される値です。

  • valueiffalseは、条件がFALSEと評価された場合に返される値です。

Switch 関数もあり、テストする複数の条件がある場合に使いやすく、理解しやすくなります。

Switch( expr-1, value-1 [, expr-2, value-2 ] … [, expr-n, value-n ] )

Switch関数の引数リストは、式と値のペアで構成されています。式は左から右に評価され、Trueと評価される最初の式に関連付けられた値が返されます。パーツが適切にペアリングされていない場合、実行時エラーが発生します。たとえば、expr-1がTrueの場合、Switchはvalue-1を返します。 expr-1がFalseで、expr-2がTrueの場合、Switchはvalue-2を返します。

次の場合、スイッチはNull値を返します。

  • どの式もTrueではありません。

  • 最初のTrue式には、Nullという対応する値があります。

注:スイッチは、1つの式のみを返しますが、すべての式を評価します。このため、望ましくない副作用に注意する必要があります。たとえば、式の評価の結果、ゼロによる除算エラーが発生した場合、エラーが発生します。

53
Mitch Wheat

Accessにはcaseステートメントはありません。代わりに、switchステートメントを使用できます。以下のようなものになります。

switch(dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,dbo_tbl_property.LASTSERVICEDATE <= Contour_dates.[Last CP12 Date],Contour_dates.[Last CP12 Date])

詳細については、以下を参照してください。 http://www.techonthenet.com/access/functions/advanced/switch.php

または、VBAでのケース関数の実装例:

http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html

よろしく、J。

9
juckobee