access中case替代方法
来源:互联网 发布:黑龙江网络教育大学 编辑:程序博客网 时间:2024/05/29 13:17
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]
- access中case替代方法
- access中case替代方法
- access 中 case 的替代方法
- Access中替代case when的方法
- db2 select中使用case替代行转列操作
- excel 中如何使用函数替代case when 进行转换
- Access数据库里使用case when语句的方法
- C# Winform Access数据库中Case when语句用法
- 用Hashtable替代select case
- Flex中替代cookit操作的方法
- Flex中替代cookit操作的方法
- Flex中替代cookit操作的方法
- FireFox中替代onpropertychange事件的方法
- 在HQL语句中,替代?的方法
- Hibernate中session.connection()的替代方法
- jstl中else替代方法,<c:else
- EditText中singleLine过期替代方法
- SQL Server中 Case When 函数 与 Access中 IIF 函数的应用
- Struts2 org.apache.commons.dbcp.BasicDataSource
- FTP基础知识
- IDEA数据加密算法
- 《红酒坊》DM杂志
- 2.21JAVA学习笔记
- access中case替代方法
- ASP.NET 安全认证
- asm 磁盘头修复
- 鼠标的各种样式
- 解读 LWUIT 之三:LWUIT 控件(上)
- jquery浏览器版本检测
- 救助!!!!
- 又见bug--粗心大意害死人
- ORACLE 中ROWNUM用法总结!