web-dev-qa-db-fra.com

Quelle est la bonne instruction CASE SELECT dans Access 2010?

J'utilise vb.net et Access 2010 comme base de données (.accdb)

Cela fonctionne avec MySQL:

SELECT user_id, username, first_name, middle_name, last_name,
CASE is_enable WHEN 1 THEN 'Yes' ELSE 'No' END 
FROM tbl_user_accounts ORDER BY user_id

Mais lorsque la même requête est transmise à Access, j'obtiens l'erreur suivante:

Unrecognized keyword WHEN.

Donc, je suppose que la déclaration CASE est différente dans l'accès, ou est-ce que l'accès a cette fonction?

P.S.
est_enable est booléen

13
Ruben_PH

Deviner:
Access 2010 n’a pas la fonction CASE, nous utilisons plutôt SWITCH.

SELECT user_id, username, first_name, middle_name, last_name, SWITCH(is_enable=True,'Yes',is_enable=False,'No') FROM tbl_user_accounts ORDER BY user_id

Merci à Chuff et JW.

15
Ruben_PH

Sinon, vous pouvez utiliser IIF

IIF(is_enable = 1 , 'YES', 'NO')
10
John Woo

Choose est une autre fonction Access (vraiment VBA) disponible dans les requêtes, similaire à Switch, mais renvoie un index à une liste de réponses. Par exemple, Choisir ([Choice], "A", "B", "C") renverrait "B" si Choice avait 2. Je l'avais trouvé utile par le passé.

2
Peter Lake

C’est vraiment un problème d’affichage, et il serait probablement préférable de le faire ailleurs que sous SQL. is_enabled est clairement un type de données booléen/YesNo, vous pouvez donc simplement le formater:

 SELECT Format(AYesNo,'Yes/No') As ATextYN FROM table1

Ou

 Format(AYesNo,'True/False')
 Format(AYesNo,'On/Off')

Tous fonctionnent en VB.Net et renvoient du texte, pas des booléens.

Voir http://msdn.Microsoft.com/en-us/library/office/gg251755.aspx

1
Fionnuala

Essaye ça

yourColumnName=case when is_enable=1 then 'Yes' ELSE 'No' END
0
polin