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
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
É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.
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.