Access SQL中的Select Case相当于什么?

Kel*_* K. 34 ms-access select-case

我有一个查询,其中包括名为openingbalance佣金的字段.我想基于opensbalance来计算佣金的值,类似于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
Run Code Online (Sandbox Code Playgroud)

但由于Access不允许Select Case查询,我如何在Access SQL中实现我的目标?

Han*_*sUp 57

Switch Function视为多个IIf()表达式的替代.它将从表达式计算结果为True的第一个表达式/值对返回值,并忽略任何剩余的对.该概念类似于SELECT ... CASE您引用的方法,但在Access SQL中不可用.

如果要将计算字段显示为commission:

SELECT
    Switch(
        OpeningBalance < 5001, 20,
        OpeningBalance < 10001, 30,
        OpeningBalance < 20001, 40,
        OpeningBalance >= 20001, 50
        ) AS commission
FROM YourTable;
Run Code Online (Sandbox Code Playgroud)

如果要将该计算值存储到名为的字段commission:

UPDATE YourTable
SET commission =
    Switch(
        OpeningBalance < 5001, 20,
        OpeningBalance < 10001, 30,
        OpeningBalance < 20001, 40,
        OpeningBalance >= 20001, 50
        );
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,看看您是否Switch()更容易理解和管理.IIf()s随着条件数量的增加,多个人会变得令人难以置信.

  • HansUp 你是最伟大的。开关功能很好用。谢谢 (2认同)

Red*_*ter 5

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

请注意,您可以嵌套IIF语句来处理多个案例.这里有一个例子:http://forums.devshed.com/database-management-46/query-ms-access-iif-statement-multiple-conditions-358130.html

SELECT IIf([Combinaison] = "Mike", 12, IIf([Combinaison] = "Steve", 13)) As Answer 
FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

  • 感谢RedFilter的响应,这非常适合我正在处理的另一个查询,我只需要组合2 if语句.由于我刚刚开始使用Access 4个月前,我认为HansUp建议的切换功能更容易阅读. (2认同)