access中case替代方法

来源:互联网 发布:黑龙江网络教育大学 编辑:程序博客网 时间:2024/05/29 13:17
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 '***** '
end
from 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中有字段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,
             UserName,
             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,
             UserName,
             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, 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,
             UserName,
             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,
             UserName,
             IIF(CHOOSE(CINT(Sex),'男性','女性') IS NULL,
                '保密',
                CHOOSE(CINT(Sex),'男性','女性')
               ) AS SexName
FROM tUser



如果你说sex还是使用的m/f,那么怎么用?,可以画蛇添足,使用Choose + Switch的嵌套啊。具体的嵌套代码我就不写了,没有什么价值,主要是在CInt(Sex)那儿嵌套,通过Switch对不同的Sex取不同的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]

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大数据被风控了怎么办 另存为pdf保存后怎么办 网贷大数据烂了怎么办 征信大数据乱了怎么办 当工作遇到瓶颈怎么办 学习遇到瓶颈期怎么办 住宅房产权到期怎么办 孕妇喉咙发炎咳嗽怎么办 孕妇感冒喉咙发炎怎么办 怀孕期间嗓子痛怎么办 孕妇喉咙扁桃体发炎怎么办 gta5修改器乱码怎么办 情绪不好的时候怎么办 手机qq启动失败怎么办 水槽下水管堵塞怎么办 sai笔墨太淡怎么办 你想使用粘滞键这个怎么办 怀孕36周早产怎么办 粘膜下肌瘤怀孕怎么办 电视突然打不开了怎么办 头发拉直太死板怎么办 空调风扇噪音大怎么办 娘去世了儿怎么办 全身出油严重怎么办 右键删除没了怎么办 机场忘记退税了怎么办 咪表停车没缴费怎么办 怀孕早期上坟了怎么办 痔疮手术后脱肛怎么办 严重的痔疮脱肛怎么办 食品经营公示牌怎么办? 超过最晚激活日期怎么办 授信条件不足怎么办 用公司办信用卡怎么办 贷款银行卡丢了怎么办 纳税信用等级b级怎么办 纳税信用d级怎么办 纳税信用等级c级怎么办 信用证有不符点怎么办 信用证过期银行拒付怎么办 手表发条拧不动怎么办