2013-02-09 12 views
13

Używam VB.NET i Access 2010 jako bazy danych (accdb)Co to jest poprawna instrukcja CASE SELECT w programie Access 2010?

To działa z 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 

Ale kiedy przeszedł samego zapytania do Access, pojawia się następujący błąd:

Unrecognized keyword WHEN. 

Zakładam więc, że Oświadczenie CASE różni się w dostępie, czy dostęp ma w ogóle tę funkcję?

P.S.
is_enable jest logiczna

+2

Nie ma przypadku ... Kiedy. Funkcja przełączania jest alternatywą. Zobacz ** http: //stackoverflow.com/questions/11534425/microsoft-access-case-query.** – chuff

+0

@chuff, jak zrobić coś takiego jak CASE ELSE w funkcji Switch? –

+0

@paynet można to zrobić na 'vba' –

Odpowiedz

16

Zdobione:
Access 2010 nie posiada funkcji CASE, używamy SWITCH zamiast.

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

Dzięki chuff i JW.

+3

Należy pamiętać, że jeśli żaden z warunków testu nie zostanie oceniony jako True, funkcja Switch zwróci wartość NULL. Jeśli chcesz obsłużyć domyślny przypadek, w którym nic nie pasuje, użyj: Przełącz (cond1, exp1, cond2, exp2, ..., True, expn). Ostatni warunek, True, będzie zawsze zgodny, jeśli żaden z pozostałych nie. Więc zawsze będziesz przynajmniej zwracał domyślną wartość expn. – Yawar

+0

Dzięki @ Yawar, faktycznie szukam czegoś takiego jak funkcja CASE ELSE do obsługi wyników nie w wyborze CASE. –

10

Alternatywnie you can use IIF

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

ten sam wynik @JW, wciąż otrzymuję błąd Nierozpoznany WHEN. –

+0

nie, "IIF" oświadczenie –

+0

IIF działa jak urok! Dzięki JW. Ale nadal potrzebuję CASE do przyszłego użycia porównania z więcej niż 2 wartościami. –

0

Spróbuj

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

ten sam wynik @polin, wciąż otrzymuję błąd NIEUZNAWANY GDY. –

+0

musisz podać nazwę kolumny swojej tabeli w "yourColumnName". – polin

+0

Tak, zrobiłem to. Zajmuję się odpowiedzią @ chuffa. Wygląda na to, że Access nie ma funkcji CASE. –

1

To jest naprawdę problem z wyświetlaniem i najlepiej byłoby zrobić go gdzie indziej niż SQL. is_enabled jest wyraźnie typ danych Boolean/TakNie, więc można po prostu sformatować go:

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

Albo

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

Wszystkie prace w VB.NET i powrócić tekst, a nie logiczne.

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

+0

Testowałem to i to też działa. Ale moim celem użycia instrukcji CASE, która jest teraz Deklaracją SWITCH w programie Access, jest możliwość porównania więcej niż 2 wartości, a nie tylko samej wartości boolowskiej. Tak się składa, że ​​mój przykład był boolean. Z drugiej strony, podobnie jak w przypadku chuffa, oświadczenie SWITCH w Access okazało się mylące w użyciu. Mimo to, dziękuję za odpowiedź, nie wiedziałem, że taka funkcja istnieje. Będę trzymał to pod ręką. –

2

Wybierz inny Access (naprawdę VBA) funkcja dostępna w zapytaniach, podobnie jak przełącznik ale zwraca wskaźnik do listy odpowiedzi. Na przykład, Wybierz ([Wybór], "A", "B", "C") zwróci "B", jeśli wybór był 2. Znalazłem to przydatne w przeszłości.

+0

Będę trzymał to pod ręką. Dzięki @Peter –

Powiązane problemy