Access中IIF,SWITCH,CHOOSE的使用技巧
- 2017-09-12 17:32:00
- 大漠孤煙SKY 轉(zhuǎn)貼
- 15627
在Access數(shù)據(jù)庫中,很多SQL語句都是和sqlServer通用的。但是也有部分不能使用的函數(shù)兩者是不相通的。
例如:
SELECT UserPassportID as PassportID, UserID Case ObjectTypeID When 1 then ObjectID
End as TerminalID, Invalidate From UserPassport
此語句在SQL里是能運(yùn)行的,但在Access里會(huì)提示語法錯(cuò)誤(操作符丟失).在查詢表達(dá)式'Case ObjectTypeID
When 1 then ObjectID End'中?
如果是多條件,我們可以這樣處理:
在SQL中:
select bb,cc,case aa when '一星級(jí)' then '*'
when '二星級(jí)' then '** '
when '三星級(jí)' then '*** '
when '四星級(jí)' then '**** '
when '五星級(jí)' then '***** '
end
from aaa
在Access中:
select bb,cc,iif(aa='一星級(jí)','*',iif(aa='二星級(jí)','**',iif(aa='三星級(jí)','***',iif(aa='四星級(jí)','****',iif(aa='五星級(jí)','*****'))))) from aaa;
Access中Switch和Choose函數(shù)的用法
Access中程序流程函數(shù)有三個(gè):Iif 、Switch、Switch關(guān)鍵字
Access 中沒有Case When的用法,所以對于某些篩選比較就顯得很吃力。Access中有一個(gè)Switch可以解決這個(gè)問題。
Switch 的語法是:SWITCH( case_1, result_1[, case_2, result_2...])。
Switch的計(jì)算順序?yàn)閺淖蟮接?,將返回第一個(gè)為true的case對應(yīng)的result。ACCESS對Switch有預(yù)編譯(基本能夠?qū)戇M(jìn)ACCESS的Sql都有預(yù)編譯,ACCESS不支持Execute(SqlString)的用法),所以Switch中的條件和結(jié)果 不能有邏輯錯(cuò)誤和語法錯(cuò)誤,否則不能執(zhí)行。
如表tUser中有字段sex Text(1),用于存儲(chǔ)用戶性別,其中,如sex='m',用戶為男性;sex='f',用戶為女性;其他情況為保密。為了便于sql語句的說明,我們假設(shè)還有其他兩個(gè)字段,userid和username。
在SqlServer中,如果要在搜索結(jié)果中直接顯示性別的名稱SexName(不是m/f之類的代碼),使用Case When很方便。
SELECT UserID,
UserName,
SexName = WHEN LCASE(Sex)
CASE 'm' THEN N'男'
CASE 'f' THEN N'女'
ELSE N'保密' END
FROM tUser
ACCESS不支持WHEN CASE的用法。雖然不那么靈巧,但是用Switch可以解決這個(gè)問題。
SELECT UserID,
UserName,
SWITCH(
Sex = 'f', '男',
Sex = 'm', '女',
True, '保密'
) AS SexName
FROM tUser
上述中最后一個(gè)Case為true,該用法類似于When Case語法中的Else。
Choose關(guān)鍵字
Choose函數(shù)的語法如下:Choose(Index,Choice_1[,Choice_2...])。其中,Index為從1開始的整數(shù),Choice對應(yīng)的是與Index相對應(yīng)的選擇項(xiàng)的值。
一時(shí)沒有想到太好的例子,就用上面的那個(gè)關(guān)于用戶性別的例子吧。假如上面的sex使用1替代m,代表男性,2替代f,代表女性。
SELECT UserID,
UserName,
IIF(CHOOSE(CINT(Sex),'男性','女性') IS NULL,
'保密',
CHOOSE(CINT(Sex),'男性','女性')
) AS SexName
FROM tUser
如果你說sex還是使用的m/f,那么怎么用?,可以畫蛇添足,使用Choose + Switch的嵌套啊。具體的嵌套代碼我就不寫了,沒有什么價(jià)值,主要是在CInt(Sex)那兒嵌套,通過Switch對不同的Sex取不同的Index值。
實(shí)話實(shí)說,我還沒有發(fā)現(xiàn)Choose有什么更好的意義。因?yàn)镮ndex對應(yīng)的Choice都是索引好的,就是說需要事先定義的。相對來說,這樣就很不靈活 了。索引項(xiàng)都是一個(gè)一個(gè)寫的(本文不討論在數(shù)據(jù)庫外生成Sql的情況),這很麻煩。功能上Switch可以滿足它的所有功能,而且更靈活,邏輯更清晰。
SELECT code,SWITCH(
mid(code,1,len(code)-2) = '', '0',
True,mid(code,1,len(code)-2)
) AS pcode
FROM wz_cl order by code
- office課程播放地址及課程明細(xì)
- Excel Word PPT Access VBA等Office技巧學(xué)習(xí)平臺(tái)
- 將( .accdb) 文件格式數(shù)據(jù)庫轉(zhuǎn)換為早期版本(.mdb)的文件格式
- 將早期的數(shù)據(jù)庫文件格式(.mdb)轉(zhuǎn)換為 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 數(shù)據(jù)庫引擎和訪問連接引擎以阻止對遠(yuǎn)程數(shù)據(jù)庫的訪問(remote table)
- Access 365 /Access 2019 數(shù)據(jù)庫中哪些函數(shù)功能和屬性被沙箱模式阻止(如未啟動(dòng)宏時(shí))
- Access Runtime(運(yùn)行時(shí))最全的下載(2007 2010 2013 2016 2019 Access 365)
- Activex控件或Dll 在某些電腦無法正常注冊的解決辦法(regsvr32注冊時(shí)卡住)
- office使用部分控件時(shí)提示“您沒有使用該ActiveX控件許可的問題”的解決方法
- RTF文件(富文本格式)的一些解析
- Access樹控件(treeview) 64位Office下出現(xiàn)橫向滾動(dòng)條不會(huì)自動(dòng)定位的解決辦法
- Access中國樹控件 在win10電腦 節(jié)點(diǎn)行間距太小的解決辦法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 樹控件 ListView列表等64位MSCOMMCTL.OCX控件下載
- VBA或VB6調(diào)用WebService(直接Post方式)并解析返回的XML
- 早期PB程序連接Sqlserver出現(xiàn)錯(cuò)誤
- MMC 不能打開文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一個(gè)MMC控制臺(tái),或者用后來的MMC版
- sql server連接不了的解決辦法
- localhost與127.0.0.1區(qū)別
- Roych的淺談數(shù)據(jù)庫開發(fā)系列(Sql Server)
- sqlserver 自動(dòng)備份對備份目錄沒有存取權(quán)限的解決辦法
- 安裝Sql server 2005 express 和SQLServer2005 Express版企業(yè)管理器 SQLServer2005_SSMSEE
聯(lián)系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |