Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access Access SQL中的Select Case等效于什么?_Ms Access_Select Case - Fatal编程技术网

Ms access Access SQL中的Select Case等效于什么?

Ms access Access SQL中的Select Case等效于什么?,ms-access,select-case,Ms Access,Select Case,我有一个查询,其中包括名为openingbalance和commissions的字段。我想基于openingbalance计算佣金值,类似于Access VBA中的Select Case块: Select Case OpeningBalance Case 0 To 5000 commission = 20 Case 5001 To 10000 commission = 30 Case 10001 To 20000 commissi

我有一个查询,其中包括名为openingbalance和commissions的字段。我想基于openingbalance计算佣金值,类似于Access VBA中的
Select Case
块:

Select Case OpeningBalance
   Case 0 To 5000
        commission = 20
   Case 5001 To 10000
        commission = 30
   Case 10001 To 20000
        commission = 40
   Case Else
        commission = 50
End Select

但是由于Access不允许在查询中使用
选择Case
,我如何才能在Access SQL中实现我的目标?

您可以使用IIF获得类似的结果

注意,您可以嵌套IIF语句来处理多个情况。这里有一个例子:

您可以执行以下操作:

select
iif ( OpeningBalance>=0 And OpeningBalance<=500 , 20, 

                  iif ( OpeningBalance>=5001 And OpeningBalance<=10000 , 30, 

                       iif ( OpeningBalance>=10001 And OpeningBalance<=20000 , 40, 

50 ) ) ) as commission
from table
选择
iif(OpeningBalance>=0,OpeningBalance=5001,OpeningBalance=10001,OpeningBalance考虑将作为多个
iif()的替代方案
expressions。它将返回表达式计算为True的第一个表达式/值对中的值,并忽略任何剩余的表达式/值对。该概念类似于您引用的
SELECT…CASE
方法,但在Access SQL中不可用

如果要将计算字段显示为佣金

选择
开关(
开口天平<5001,20,
开口天平<10001,30,
期初余额<20001,40,
期初余额>=20001,50
)作为佣金
从你的桌子上;
如果要将该计算值存储到名为“佣金”的字段中,请执行以下操作:

更新您的表
设定佣金=
开关(
开口天平<5001,20,
开口天平<10001,30,
期初余额<20001,40,
期初余额>=20001,50
);

不管是哪种方式,看看你是否觉得
Switch()
更容易理解和管理。随着条件数量的增加,多个
IIf()
可能会让人难以置信。

HansUp你是最棒的。Switch函数工作得很好。ThanksIs
Switch()
当从Access本身执行时,只能在Access SQL中使用的VBA函数之一(如
Nz()
),或者当您使用JET-Red OLE-DB/ODBC或ACE驱动程序时,它也可以工作吗?因为它是,我认为无论查询是否在Access会话中运行,它都应该可以在任何查询中工作。感谢响应RedFilter,这非常适合我正在处理的另一个查询,我只需要组合2个if语句。因为我刚刚开始使用Access 4个月前,我认为HansUp建议的开关功能更容易阅读。
select
iif ( OpeningBalance>=0 And OpeningBalance<=500 , 20, 

                  iif ( OpeningBalance>=5001 And OpeningBalance<=10000 , 30, 

                       iif ( OpeningBalance>=10001 And OpeningBalance<=20000 , 40, 

50 ) ) ) as commission
from table