access中case替代方法
access中case替代方法
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可以满足它的所有功能,而且更灵活,逻辑更清晰。
转载于:https://www.cnblogs.com/liuhaitao/archive/2009/01/19/1378591.html
access中case替代方法相关推荐
- SQL中Case when 方法的使用
update T_Product set amount=( case when quantity<10 then amount*(1-0.1) when quantity between 10 ...
- php 中c函数重载,php函数重载的替代方法--伪重载详解
php //函数重载的替代方法-伪重载 // //确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数 //在看到了func_get_arg, ...
- access 中相当于 case 语句的函数 switch
access中没有case语句,但是可以使用 switch 函数替代 功能: 对表达式进行判断,并从左到右返回第一个判断表达式结果为 Ture 相对应的值 语法: switch (expr-1, va ...
- jQuery1.9+中删除了live以后的替代方法
为什么80%的码农都做不了架构师?>>> 根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. ...
- JSP中 request.getRealPath(/xx/yy) 方法提示已经过时的替代方法
我们的JSP项目在上传文件时通常都需要获取目录在服务器上的绝对路径,request.getRealPath()方法显示已经过时,但是还是有替代方法的. HttpSession session = re ...
- 关于Hive中case when不准使用子查询的解决方法
关于Hive中case when不准使用子查询的解决方法 参考文章: (1)关于Hive中case when不准使用子查询的解决方法 (2)https://www.cnblogs.com/harryl ...
- C++17标准STL库并行策略在GCC编译器中的替代实现方法
C++17标准STL库并行策略在GCC编译器中的替代实现方法 严正声明:本文系作者davidhopper原创,未经许可,不得转载. 2019年8月5日更新: GCC 9.1.0可支持C++ 17标 ...
- list中移除元素:用remove(i)方法遇到的坑以及替代方法
代码如下: for (int i = 0; i < organDtos.size(); i++) {if(organDtos.get(i)!=null && organDtos. ...
- ACCESS中实现密码输入值显示和掩盖的方法
ACCESS中编程密码输入文本框的"输入掩码"属性 一.目的:点击一个眼睛的图标,实现密码输入框的输入值隐藏和显现. 二.操作步骤: 下载一个眼睛的图标 点击添加图像 ,到输入密码 ...
最新文章
- 深入理解 Cache 工作原理
- 机器学习、数据挖掘及其他
- github中的watch、star、fork的作用
- 谈谈 Java 的克隆
- 如何实现Punycode中文域名转码
- 数位DP入门之hdu 3652 B-number
- 将navigationbar的translucent属性设为No后,子控制器视图整体下移问题
- POI实现超大数据的Excel的读写操作
- 一个高性能的key/value存储服务器 - Tarantool/Box
- ResNet 网络结构与残差连接介绍
- 微信小程序如何实现登陆功能
- 微信小程序上线,后台接口失效问题
- 数字信号处理:时域采样定理与频域采样定理
- 思岚S2激光雷达5-雷达数据实时保存
- 获取打开的记事本中的内容 - 回复 ymg1103 的问题
- 服务机器人研究报告:产业链分析及投资前景预测
- linux内核协议栈 TCP层数据发送之发送新数
- c#文件名去掉后缀_C#如何从文件路径中分离出文件名以及文件扩展名
- windows在此计算机上找不到系统映象,Win7下打开程序提示应用程序或dll 为无效的windows映像怎么办...
- 使用xmake配合arm-none-eabi-gcc构建stm32工程
热门文章
- linux xorg 文件 位置,Linux系统中xorg.conf文件详细介绍
- 3 设置网格数的大小_流体仿真中,六面体(Hex)网格的求解效率真的比四面体(Tet)高”很多”么?...
- 远东传动收购机器人_一张图为你总结最近5年在机器人领域收购案例
- 用python海龟画图_天呐!python 的乌龟绘图怎么用啊!?
- mysql 多对多_mysql多对一、多对多查询实践
- java并发编程之CompletableFuture
- 对java的final,finally,finalize应用场景,你用对了吗
- 条件概率的一些结论以及理解
- java 不兼容类型_java – 不兼容的类型和新鲜的类型变量
- java中nodelist的用法_我可以在Java中使用for-each遍历一个NodeList吗?