50

我有一个查询,其中包括名为openingbalanceCommissions的字段。我想根据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 不允许Select Case在查询中,我如何才能在 Access SQL 中实现我的目标?

4

3 回答 3

84

Switch 函数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;

如果您想将该计算值存储到名为 的字段中commission

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

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

于 2013-04-02T23:59:36.320 回答
8

您可以使用 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;
于 2013-04-02T20:53:36.137 回答
1

你可以在下面做:

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
于 2013-04-02T20:55:48.040 回答