web-dev-qa-db-ja.com

Access 2010の正しいCASE SELECTステートメントとは何ですか?

私はvb.netとAccess 2010をデータベース(.accdb)として使用しています

これは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

しかし、同じクエリをAccessに渡すと、次のエラーが表示されます。

Unrecognized keyword WHEN.

CASEステートメントのアクセスは異なると思いますか、それともアクセスにはその機能がありますか?

追伸.
is_enableはブール値です

13
Ruben_PH

理解した:
Access 2010にはCASE機能がありません。代わりに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

チャフとJWに感謝します。

16
Ruben_PH

または、 IIFを使用できます

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

Chooseは、Switchに似ていますが、回答のリストにインデックスを返す、クエリで使用できる別のAccess(本当にVBA)関数です。たとえば、Choice([Choice]、 "A"、 "B"、 "C")は、Choiceが2の場合に "B"を返します。これは過去に役に立ちました。

2
Peter Lake

これは実際には表示の問題であり、SQL以外の場所で行うのが最適です。 is_enabledは明らかにBoolean/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 を参照してください

1
Fionnuala

これを試して

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