加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

access 中 case 的替代方法

发布时间:2020-12-12 15:35:42 所属栏目:MsSql教程 来源:网络整理
导读: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

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 '***** ' end from aaa Access: select?? bb,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中有字段sex Text(1),用于存储用户性别,其中,如sex='m',用户为男性;sex='f',用户为女性;其他情况为保密。为了便于sql语句的说明,我们假设还有其他两个字段,userid和username。 在SqlServer中,如果要在搜索结果中直接显示性别的名称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可以解决这个问题。 SELECT UserID,???????????? SWITCH( ???????????? Sex = 'f',?? '男',???????????? Sex = 'm','女',???????????? True,'保密' ???????????? ) AS SexName FROM tUser 上述中最后一个Case为true,该用法类似于When Case语法中的Else。 Choose关键字 对于Choose关键字的用法,暂时没有想到在它与SQLServer中的那个用法对应。 Choose函数的语法如下:Choose(Index,Choice_1[,Choice_2...])。其中,Index为从1开始的整数,Choice对应的是与Index相对应的选择项的值。 一时没有想到太好的例子,就用上面的那个关于用户性别的例子吧。假如上面的sex使用1替代m,代表男性,2替代f,代表女性。 SELECT UserID,???????????? IIF(CHOOSE(CINT(Sex),'男性','女性') IS NULL,???????????????? '保密',???????????????? CHOOSE(CINT(Sex),'女性') ?????????????? ) AS SexName FROM tUser Access中程序流程函数有三个,Iif ,Switch 和 Choose。IIF的用法已经很常见了,网上搜一下大把打把的。这儿主要讲后面的两个:Switch和Choose。 Switch关键字 Access 中没有Case When的用法,所以对于某些筛选比较就显得很吃力。不过还好,Access中有一个Switch可以解决这个问题。Switch 的语法是:SWITCH( case_1,'女性') ?????????????? ) AS SexName FROM tUser 如果你说sex还是使用的m/f,那么怎么用?,可以画蛇添足,使用Choose + Switch的嵌套啊。具体的嵌套代码我就不写了,没有什么价值,主要是在CInt(Sex)那儿嵌套,通过Switch对不同的Sex取不同的Index值。 实 话实说,我还没有发现Choose有什么更好的意义。因为Index对应的Choice都是索引好的,就是说需要事先定义的。相对来说,这样就很不灵活 了。索引项都是一个一个写的(本文不讨论在数据库外生成Sql的情况),这很麻烦。功能上Switch可以满足它的所有功能,而且更灵活,逻辑更清晰。SELECT code,SWITCH(???????????? mid(code,1,len(code)-2) = '',?? '0',mid(code,len(code)-2)???????????? ) AS pcodeFROM?? wz_cl order by code

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读