web-dev-qa-db-fra.com

MS Access prend-il en charge la clause "CASE WHEN" si vous vous connectez à ODBC?

ODBC prend en charge la clause CASE WHEN Pour MS Access? Y a-t-il une autre base de données qui ne prend pas en charge la clause CASE WHEN? J'ai essayé la requête suivante lors de la connexion à MS Accédez avec ODBC mais obtenez une exception.

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)'

J'essaie de trouver un moyen commun qui fonctionne pour la plupart de la base de données pour générer (calculer) les nouvelles "colonnes booléennes" avec une expression de comparaison tout en se connectant avec ODBC. En fait, MS Access prend en charge la comparaison dans la clause SELECT, mais pour certaines autres bases de données, la clause CASE est nécessaire. Pour MS Access, le SQL peut être

SELECT AGE > 10 FROM demo

mais dans d'autres, il faut

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

13
Aaron

Vous pouvez utiliser l'instruction IIF comme dans l'exemple suivant:

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

Étant donné que vous utilisez Access pour composer la requête, vous devez vous en tenir à la version Access de SQL.

Pour choisir entre plusieurs valeurs de retour différentes, utilisez la fonction switch (). Donc, pour traduire et étendre un peu votre exemple:

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

Le cas "vrai" est celui par défaut. Si vous ne l'avez pas et qu'aucun des autres cas ne correspond, la fonction renverra null.

Site Web Office contient de la documentation à ce sujet, mais leur exemple de syntaxe est VBA et il est également incorrect. Je leur ai donné des commentaires à ce sujet, mais vous devriez bien suivre l'exemple ci-dessus.

28
Yawar

J'ai dû utiliser une instruction IIF multiple pour créer un résultat similaire dans ACCESS SQL.

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

Tout le reste restera nul.

1
Ron