2013-02-09 42 views
13

我使用vb.net和Access 2010的數據庫(.accdb)什麼是在Access 2010中正確的CASE SELECT語句?

這工作與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 

但是,當通過相同的查詢訪問,我得到以下錯誤:

Unrecognized keyword WHEN. 

因此,我假設CASE聲明在訪問方面不同,或者訪問是否具有該函數?

P.S.
IS_ENABLE是布爾

+2

沒有案例......何時。開關功能是一種選擇。請參閱** http://stackoverflow.com/questions/11534425/microsoft-access-case-query.** – chuff 2013-02-09 06:34:31

+0

@chuff,您如何在Switch功能中執行CASE ELSE之類的操作? – 2013-02-09 06:38:26

+0

@paynet你可以在'vba'上做到這一點 – 2013-02-09 06:43:56

回答

16

想通了:
Access 2010中不具備CASE功能,我們使用開關來代替。

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

感謝粗人和JW。

+3

請注意,如果沒有您的測試條件評估爲True,則Switch函數將返回NULL。如果你想處理一個沒有匹配的默認情況,使用:Switch(cond1,exp1,cond2,exp2,...,True,expn)。如果沒有其他人做到,最後一個條件是True。所以你總會至少返回一個默認值expn。 – Yawar 2013-02-10 21:08:39

+0

謝謝@Yawar,我實際上在尋找像CASE ELSE這樣的函數來處理不在CASE Selection中的結果。 – 2013-02-11 04:52:14

10

另外,you can use IIF

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

@JW同樣的結果,仍然得到無法識別的WHEN錯誤。 – 2013-02-09 06:31:54

+0

不,「IIF」聲明 – 2013-02-09 06:32:08

+0

IIF的工作就像一個魅力!謝謝JW。但是我仍然需要CASE以備將來使用比較超過2個值。 – 2013-02-09 06:34:51

0

試試這個

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

結果相同@polin,仍然無法識別WHEN錯誤。 – 2013-02-09 06:37:40

+0

你需要在「yourColumnName」中給出你的表的列名。 – polin 2013-02-09 06:40:50

+0

是的,我做到了。我正在研究@ chuff的答案。看起來像Access沒有CASE功能。 – 2013-02-09 06:42:40

1

這實際上是一個顯示問題,並可能最好在SQL以外的地方完成。 is_enabled顯然是一個布爾/ YESNO數據類型,所以你可以格式化:

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

或者

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

在VB.Net所有的工作,回到文本,而不是布爾值。

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

+0

我測試了這個,它也可以。但是我使用CASE語句的目的是在比較兩個以上的值之間進行比較,而不僅僅是布爾值。恰巧我的例子是布爾值。另一方面,就像chuff所說的那樣,Access中的SWITCH聲明被證明是令人困惑的。儘管如此,感謝您的回答,我不知道這樣的功能存在。我會保持這個方便。 – 2013-02-09 16:53:36

2

選擇是另一個Access(真的VBA)功能在查詢中使用,類似於開關,但返回一個索引答案的列表。例如,如果Choice是2,則選擇([選擇],「A」,「B」,「C」)將返回「B」。我發現它在過去很有用。

+0

我會保持這個方便。謝謝@Peter – 2013-02-11 04:53:07