2013-02-09 4 views
13

ich vb.net und Access 2010 als Datenbank benutze (ACCDB)Was ist die richtige CASE SELECT-Anweisung in Access 2010?

Dies funktioniert mit 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 

Aber wenn die gleiche Abfrage für den Zugriff übergeben, bekomme ich folgende Fehlermeldung:

Unrecognized keyword WHEN. 

Also nehme ich an, dass die CASE-Anweisung im Zugriff unterscheidet, oder hat Zugriff überhaupt diese Funktion?

P.S. Alternativ
is_enable ist boolean

+2

Es gibt kein Case ... Wann. Switch-Funktion ist eine Alternative. Siehe ** http: //stackoverflow.com/questions/11534425/microsoft-access-case-query.** – chuff

+0

@chuff, wie machen Sie so etwas wie CASE ELSE in der Switch-Funktion? –

+0

@paynet können Sie es auf 'vba' –

Antwort

16

figured it out:
Access 2010 nicht die CASE-Funktion verfügt, verwenden wir SWITCH statt.

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

Dank chuff und JW.

+3

Beachten Sie, dass, wenn keine Ihrer Testbedingungen zu True ausgewertet werden, die Switch-Funktion NULL zurückgibt. Wenn Sie einen Standardfall behandeln möchten, in dem nichts übereinstimmt, verwenden Sie: Switch (cond1, exp1, cond2, exp2, ..., True, expn). Die letzte Bedingung, True, wird immer übereinstimmen, wenn keiner der anderen dies tut. Sie erhalten also immer mindestens den Standardwert expn zurück. – Yawar

+0

Danke @Yawar, ich bin tatsächlich auf der Suche nach etwas wie die CASE ELSE-Funktion, um Ergebnisse nicht in der CASE-Auswahl zu behandeln. –

10

, you can use IIF

IIF(is_enable = 1 , 'YES', 'NO') 
+0

gleiches Ergebnis @JW, immer noch der unerkannte WHEN-Fehler. –

+0

nein, die 'IIF' Aussage –

+0

IIF funktioniert wie ein Zauber! Danke JW. Aber ich brauche noch den CASE für die zukünftige Verwendung des Vergleichs mit mehr als 2 Werten. –

0

Versuchen Sie, diese

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

das gleiche Ergebnis @polin, immer noch die Unerkannte WHEN Fehler. –

+0

müssen Sie einen Spaltennamen Ihrer Tabelle in "yourColumnName" angeben. – polin

+0

Ja, das habe ich getan. Ich schaue in @ Chuffs Antwort. Scheint, als hätte Access nicht die CASE-Funktion. –

1

Dies ist wirklich ein Problem mit der Anzeige und wäre möglicherweise am besten anderswo als SQL gemacht. is_enabled ist eindeutig ein Boolean/YesNo Datentyp, so können Sie es einfach formatieren:

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

Oder

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

Alle Arbeiten in VB.Net und Rück Text, nicht boolean.

Siehe http://msdn.microsoft.com/en-us/library/office/gg251755.aspx

+0

Ich habe das getestet und es funktioniert auch. Aber mein Zweck für die Verwendung von CASE-Anweisung, die jetzt SWITCH-Anweisung in Access ist, ist in der Lage, mehr als 2 Werte und nicht nur boolesch allein zu vergleichen. Es passiert einfach, dass mein Beispiel boolesch war. Auf der anderen Seite, genau wie der Chuff sagte, erweist sich die SWITCH-Anweisung in Access als verwirrend. Trotzdem, danke für die Antwort, ich wusste nicht, dass eine solche Funktion existiert. Ich halte das bereit. –

2

Wählen Sie ein anderes Access ist (wirklich VBA) Funktion, die bei Abfragen, ähnlich zu wechseln, sondern einen Index auf eine Liste von Antworten zurückgibt. Zum Beispiel würde Choose ([Choice], "A", "B", "C") "B" zurückgeben, wenn Choice 2 wäre. Ich habe es in der Vergangenheit als nützlich empfunden.

+0

Ich behalte das praktisch. Danke @Peter –