access中case替代方法

2021-05-21 20:14:40 字數 4240 閱讀 1467

access中case替代方法

2009-12-26 14:01

select

userpassportid as passportid,

userid,

grantorid,

case objecttypeid

when 1 then objectid

end

as terminalid,

type, flag, grantdate, validate, invalidate

from userpassport

在sql裡能執行,但在access裡總提示語法錯誤(操作符丟失).在查詢表示式'case objecttypeid

when 1 then objectid

end'中?

sql:

select bb,cc,case aa when '一星級' then '*'

when '二星級' then '** '

when '三星級' then '*** '

when '四星級' then '**** '

when '五星級' then '***** '

endfrom aaa

access:

select   bb,cc,iif(aa='一星級','*',iif(aa='二星級','**',iif(aa='三星級','***',iif(aa='四星級','****',iif(aa='五星級','*****')))))

from aaa;

access中switch和choose關鍵字的用法access中程式流程函式有三個,iif ,switch

switch關鍵字

access中沒有case when的用法,所以對於某些篩選比較就顯得很吃力。不過還好,access中有乙個switch可以解決這個問題。switch 的語法是:switch( case_1, result_1[, case_2, result_2...])。switch的計算順序為從左到右,將返回第乙個為true的case對應的result。access對switch有預編譯(基本能夠寫進access的sql都有預編譯,access不支援execute(sqlstring)的用法),所以switch中的條件和結果不能有邏輯錯誤和語法錯誤,否則不能執行。

例項:表tuser中有字段*** text(1),用於儲存使用者性別,其中,如***='m',使用者為男性;***='f',使用者為女性;其他情況為保密。為了便於sql語句的說明,我們假設還有其他兩個字段,userid和username。

在sqlserver中,如果要在搜尋結果中直接顯示性別的名稱***name(不是m/f之類的**),使用case when很方便。

select userid,

username,

***name = when lcase(***)

case 'm' then n'男'

case 'f' then n'女'

else n'保密' end

from tuser

access不支援when case的用法。雖然不那麼靈巧,但是用switch可以解決這個問題。

select userid,

username,

switch(

*** = 'f',   '男',

*** = 'm', '女',

true, '保密'

) as ***name

from tuser

上述中最後乙個case為true,該用法類似於when case語法中的else。

choose關鍵字

對於choose關鍵字的用法,暫時沒有想到在它與sqlserver中的那個用法對應。

choose函式的語法如下:choose(index,choice_1[,choice_2...])。其中,index為從1開始的整數,choice對應的是與index相對應的選擇項的值。

一時沒有想到太好的例子,就用上面的那個關於使用者性別的例子吧。假如上面的***使用1替代m,代表男性,2替代f,代表女性。

select userid,

username,

iif(choose(cint(***),'男性','女性') is null,

'保密',

choose(cint(***),'男性','女性')

) as ***name

from tuser

access中程式流程函式有三個,iif ,switch 和 choose。iif的用法已經很常見了,網上搜一下大把打把的。這兒主要講後面的兩個:switch和choose。

switch關鍵字

access中沒有case when的用法,所以對於某些篩選比較就顯得很吃力。不過還好,access中有乙個switch可以解決這個問題。switch 的語法是:switch( case_1, result_1[, case_2, result_2...])。switch的計算順序為從左到右,將返回第乙個為true的case對應的result。access對switch有預編譯(基本能夠寫進access的sql都有預編譯,access不支援execute(sqlstring)的用法),所以switch中的條件和結果不能有邏輯錯誤和語法錯誤,否則不能執行。

例項:表tuser中有字段*** text(1),用於儲存使用者性別,其中,如***='m',使用者為男性;***='f',使用者為女性;其他情況為保密。為了便於sql語句的說明,我們假設還有其他兩個字段,userid和username。

在sqlserver中,如果要在搜尋結果中直接顯示性別的名稱***name(不是m/f之類的**),使用case when很方便。

select userid,

username,

***name = when lcase(***)

case 'm' then n'男'

case 'f' then n'女'

else n'保密' end

from tuser

access不支援when case的用法。雖然不那麼靈巧,但是用switch可以解決這個問題。

select userid,

username,

switch(

*** = 'f',   '男',

*** = 'm', '女',

true, '保密'

) as ***name

from tuser

上述中最後乙個case為true,該用法類似於when case語法中的else。

choose關鍵字

對於choose關鍵字的用法,暫時沒有想到在它與sqlserver中的那個用法對應。

choose函式的語法如下:choose(index,choice_1[,choice_2...])。其中,index為從1開始的整數,choice對應的是與index相對應的選擇項的值。

一時沒有想到太好的例子,就用上面的那個關於使用者性別的例子吧。假如上面的***使用1替代m,代表男性,2替代f,代表女性。

select userid,

username,

iif(choose(cint(***),'男性','女性') is null,

'保密',

choose(cint(***),'男性','女性')

) as ***name

from tuser

如果你說***還是使用的m/f,那麼怎麼用?,可以畫蛇添足,使用choose + switch的巢狀啊。具體的巢狀**我就不寫了,沒有什麼價值,主要是在cint(***)那兒巢狀,通過switch對不同的***取不同的index值。

實話實說,我還沒有發現choose有什麼更好的意義。因為index對應的choice都是索引好的,就是說需要事先定義的。相對來說,這樣就很不靈活了。索引項都是乙個乙個寫的(本文不討論在資料庫外生成sql的情況),這很麻煩。功能上switch可以滿足它的所有功能,而且更靈活,邏輯更清晰。

通過看這個得到了我要的結果:

update tb_valuation as a,(select iif(state='審核','阻止',iif(state='阻止','審核',iif(state='新點評','審核'))) as b from tb_valuation where vid=@vid) as c set state=c.b where vid=@vid;

與sql2005相比的查詢

select     fatherid =case fatherid

when 1 then 'aaa'

when 2 then 'bbb'

else 'ccc '

end

from [111]

替代CASE的方法

case是乙個標量表示式,根據條件邏輯返回乙個值,既然是表示式,就不能當是一條語句來控制邏輯的流程。今天在網上看到一帖 根據上帖,建立乙個表,並填充資料 create tablet a nvarchar 10 b nvarchar 10 insert into t values 001 y inse...

替代CASE的方法

case是乙個標量表示式,根據條件邏輯返回乙個值,既然是表示式,就不能當是一條語句來控制邏輯的流程。今天在網上看到一帖 根據上帖,建立乙個表,並填充資料 create tablet a nvarchar 10 b nvarchar 10 insert into t values 001 y inse...

替代方法 聲母替代 遺漏的矯治方法

本節課程 言語訓練的知識與技巧 之 聲母替代 遺漏的矯治方法 本期,馬老師講解了聲母替代 遺漏有哪些常見的出錯現象及具體矯治辦法,並進行詳細分析。聲母替代 遺漏的矯治方法 言語訓練的知識與技巧 主要講述了聽障兒童不同的 階段,言語訓練的內容 技巧與側重點。從 初期家長關心的聽能問題入手,講解聽能反應...