web-dev-qa-db-ja.com

ODBCで接続する場合、MS Accessは「CASE WHEN」句をサポートしますか?

ODBCはMS Accessの_CASE WHEN_句をサポートしますか?_CASE WHEN_句をサポートしない他のデータベースはありますか?MS Accessへの接続中に次のクエリを試しましたODBCただし例外が発生します。

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression '(CASE WHEN (AGE > 10) THEN 1 ELSE 0 END)'

私は、ODBCに接続しながら、比較式を使用して新しい「ブール列」を生成(計算)するために、ほとんどのデータベースで機能する一般的な方法を見つけようとしています。実際、MS AccessはSELECT句の比較をサポートしていますが、他のデータベースではCASE句が必要です。 MS Accessの場合、SQLは

_SELECT AGE > 10 FROM demo_

しかし、他の人にはそれがなければなりません

SELECT (CASE WHEN (AGE > 10) THEN 1 ELSE 0 END) FROM demo

13
Aaron

次の例のようにIIFステートメントを使用できます。

SELECT
   IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
   TABLE_NAME
13
Dragoslav

Accessを使用してクエリを作成しているため、AccessのバージョンのSQLに固執する必要があります。

いくつかの異なる戻り値から選択するには、switch()関数を使用します。例を少し翻訳して拡張するには:

select switch(
  age > 40, 4,
  age > 25, 3,
  age > 20, 2,
  age > 10, 1,
  true, 0
) from demo

「true」の場合がデフォルトです。それがなく、他のどのケースも一致しない場合、関数はnullを返します。

Office Webサイト にはこれに関するドキュメントがありますが、構文例はVBAであり、これも間違っています。私は彼らにこれについてフィードバックをしましたが、上記の例に従えば大丈夫です。

28
Yawar

ACCESS SQLで同様の結果を作成するには、複数のIIFステートメントを使用する必要がありました。

IIf([refi type] Like "FHA ST*","F",IIf([refi type]="VA IRRL","V"))

残りはすべてヌルのままです。

1
Ron