14

ODBCCASE WHENは MS Access の条項をサポートしていますか? CASE WHENこの句をサポートしていない他のデータベースはありますか? ODBC を使用して MS Access に接続しているときに次のクエリを試しましたが、例外が発生しました。

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

4

3 に答える 3

28

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であり、これも間違っています。私は彼らにこれについてのフィードバックを与えましたが、あなたは上記の例に従って大丈夫なはずです。

于 2013-02-17T16:52:31.953 に答える
15

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

SELECT
   IIF(test_expression, value_if_true, value_if_false) AS FIELD_NAME
FROM
   TABLE_NAME
于 2013-05-22T12:26:11.850 に答える
1

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

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

残りはすべて Null のままです。

于 2016-11-18T22:23:53.203 に答える