Ms access IIf语句太复杂

Ms access IIf语句太复杂,ms-access,if-statement,ms-access-2003,Ms Access,If Statement,Ms Access 2003,我在MS Access 2003中尝试了一个相当长的IIf语句,但当我插嘴时,它告诉我它太复杂了: MIN_PASS_FAIL: IIf( [MIN CAR RESPONSE CODE] = "0033" , "ACCEPTED" , IIf( [MIN CAR RESPONSE CODE] = "0037" , "ACCEPTED" , IIf( [MIN CAR RESPONSE CODE] = "0038" , "ACCEPTED" , II

我在MS Access 2003中尝试了一个相当长的IIf语句,但当我插嘴时,它告诉我它太复杂了:

MIN_PASS_FAIL: IIf(
  [MIN CAR RESPONSE CODE] = "0033"
, "ACCEPTED"
, IIf(
    [MIN CAR RESPONSE CODE] = "0037"
  , "ACCEPTED"
  , IIf(
      [MIN CAR RESPONSE CODE] = "0038"
    , "ACCEPTED"
    , IIf(
        [MIN CAR RESPONSE CODE] = "0039"
      , "ACCEPTED"
      , IIf(
          [MIN CAR RESPONSE CODE] = "0040"
        , "ACCEPTED"
        , IIf(
            [MIN CAR RESPONSE CODE] = "0055"
          , "ACCEPTED"
          , IIf(
              [MIN CAR RESPONSE CODE] = "0056"
            , "ACCEPTED"
            , IIf(
                [MIN CAR RESPONSE CODE] = "0061"
              , "ACCEPTED"
              , IIf(
                  [MIN CAR RESPONSE CODE] = "0073"
                , "ACCEPTED"
                , Iif(
                    [MIN CAR RESPONSE CODE] = "0013"
                  , "INFORMATION"
                  , Iif(
                      [MIN CAR RESPONSE CODE] = "0018"
                    , "INFORMATION"
                    , Iif(
                        [MIN CAR RESPONSE CODE] = "0019"
                      , "INFORMATION"
                      , Iif(
                          [MIN CAR RESPONSE CODE] = "0028"
                        , "INFORMATION"
                        , Iif(
                            [MIN CAR RESPONSE CODE] = "0045"
                          , "INFORMATION"
                          , Iif(
                              [MIN CAR RESPONSE CODE] = "0046"
                            , "INFORMATION"
                            , Iif(
                                [MIN CAR RESPONSE CODE] = "0047"
                              , "INFORMATION"
                              , Iif(
                                  [MIN CAR RESPONSE CODE] = "0048"
                                , "INFORMATION"
                                , Iif(
                                    [MIN CAR RESPONSE CODE] = "0060"
                                  , "INFORMATION"
                                  , "REJECTED"
                                  )
                                )
                              )
                            )
                          )
                        )
                      )
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)
我想要三个输出,“接受”、“拒绝”和“信息”


我怎样才能解决这个问题?

您有一组代码映射到“已接受”,另一组代码映射到“信息”。任何其他代码都应映射到“已拒绝”

使用下面这样的表来存储前两个集合的映射。然后,您可以使用
DLookup
检索前两组代码的响应文本值

DLookup(“响应\文本”、“您的表名在此”、“响应\代码=”、[MIN CAR响应代码]&“”)
对于“已拒绝”代码,
DLookup
将返回Null。因此,您可以使用
Nz()
将“拒绝”替换为Null

新西兰(DLookup(“回复文本”、“YourTableNameHere”、“回复代码=”、[MIN CAR回复代码]&“”),“拒绝”) 类似的方法应适用于Access VBA代码或从Access会话中运行的查询。如果您将在访问会话外部运行的查询中使用此表达式,则可以使用
IIf
表达式而不是
Nz

但是,如果这是查询,请考虑将主数据表连接到映射表。那么你甚至不需要

DLookup

选择
主。[最小车辆响应代码],
Nz(ytnh.response_文本“拒绝”)为最低通过率
从…起
主表作为主表
左键作为ytnh在此处加入您的表名
在main上。[MIN CAR RESPONSE CODE]=ytnh.RESPONSE_CODE;
映射表

response\u code response\u text
0033接受
0037接受
0038接受
0039接受
0040接受
0055接受
0056接受
0061接受
0073接受
0013信息
0018信息
0019信息
0028资料
0045信息
0046信息
0047信息
0048信息
0060信息

一组代码映射到“已接受”,另一组代码映射到“信息”。任何其他代码都应映射到“已拒绝”

使用下面这样的表来存储前两个集合的映射。然后,您可以使用
DLookup
检索前两组代码的响应文本值

DLookup(“响应\文本”、“您的表名在此”、“响应\代码=”、[MIN CAR响应代码]&“”)
对于“已拒绝”代码,
DLookup
将返回Null。因此,您可以使用
Nz()
将“拒绝”替换为Null

新西兰(DLookup(“回复文本”、“YourTableNameHere”、“回复代码=”、[MIN CAR回复代码]&“”),“拒绝”) 类似的方法应适用于Access VBA代码或从Access会话中运行的查询。如果您将在访问会话外部运行的查询中使用此表达式,则可以使用
IIf
表达式而不是
Nz

但是,如果这是查询,请考虑将主数据表连接到映射表。那么你甚至不需要

DLookup

选择
主。[最小车辆响应代码],
Nz(ytnh.response_文本“拒绝”)为最低通过率
从…起
主表作为主表
左键作为ytnh在此处加入您的表名
在main上。[MIN CAR RESPONSE CODE]=ytnh.RESPONSE_CODE;
映射表

response\u code response\u text
0033接受
0037接受
0038接受
0039接受
0040接受
0055接受
0056接受
0061接受
0073接受
0013信息
0018信息
0019信息
0028资料
0045信息
0046信息
0047信息
0048信息
0060信息

HansUp将其放入查找表的答案很好。特别是如果他们可能会改变。对于不需要查找表的答案,可以使用InStr函数。试试这个:

MIN_PASS_FAIL: IIF(InStr("0033.0037.0038.0039.0040.0055.0056",[MIN CAR RESPONSE CODE]),"ACCEPTED",IIf(InStr("0013.0018.0019.0028.0045.0046.0047.0048.0060",[MIN CAR RESPONSE CODE]),"ACCEPTED",IIf(InStr("0013.0018.0019.0028.0045.0046.0047.0048.0060",[MIN CAR RESPONSE CODE]),"INFORMATION","REJECTED")))

HansUp将其放入查找表的答案是好的。特别是如果他们可能会改变。对于不需要查找表的答案,可以使用InStr函数。试试这个:

MIN_PASS_FAIL: IIF(InStr("0033.0037.0038.0039.0040.0055.0056",[MIN CAR RESPONSE CODE]),"ACCEPTED",IIf(InStr("0013.0018.0019.0028.0045.0046.0047.0048.0060",[MIN CAR RESPONSE CODE]),"ACCEPTED",IIf(InStr("0013.0018.0019.0028.0045.0046.0047.0048.0060",[MIN CAR RESPONSE CODE]),"INFORMATION","REJECTED")))

HansUp的答案肯定是最好的,因为你有很多东西要查。我将指出另一种选择,因为它在其他情况下可能很方便

由于您总是测试同一字段,因此可以在操作符中使用SQL

MIN_PASS_FAIL: IIf(
  [MIN CAR RESPONSE CODE] in (
    "0033"
  , "0037"
  , "0038"
  , ...
  )
, "ACCEPTED"
, Iif(
    [MIN CAR RESPONSE CODE] in (
      "0013"
    , "0018"
    , "0019"
    , ...
    )
  , "INFORMATION"
  , "REJECTED"
  )
)
中的
运算符测试该值是否为值列表中的一个。这将使代码相对平坦。事实上,您可以使用
开关
功能而不是
Iif
功能将其完全展平:

MIN_PASS_FAIL: Switch(
  [MIN CAR RESPONSE CODE] in (
    "0033"
  , "0037"
  , "0038"
  , ...
  )
, "ACCEPTED"
, [MIN CAR RESPONSE CODE] in (
    "0013"
  , "0018"
  , "0019"
  , ...
  )
, "INFORMATION"
, True
, "REJECTED"
)

您可以很容易地查找
Switch
函数的详细信息,但基本上它的工作原理类似于其他语言中的
case
语句或
Switch
语句,但是SQL是方便的面向表达式的,所以您总是返回一个值。

HansUp的答案肯定是最好的,因为您有很多项要查找。我将指出另一种选择,因为它在其他情况下可能很方便

由于您总是测试同一字段,因此可以在
操作符中使用SQL

MIN_PASS_FAIL: IIf(
  [MIN CAR RESPONSE CODE] in (
    "0033"
  , "0037"
  , "0038"
  , ...
  )
, "ACCEPTED"
, Iif(
    [MIN CAR RESPONSE CODE] in (
      "0013"
    , "0018"
    , "0019"
    , ...
    )
  , "INFORMATION"
  , "REJECTED"
  )
)
中的
运算符测试该值是否为值列表中的一个。这将使代码相对平坦。事实上,您可以使用
开关
功能而不是
Iif
功能将其完全展平:

MIN_PASS_FAIL: Switch(
  [MIN CAR RESPONSE CODE] in (
    "0033"
  , "0037"
  , "0038"
  , ...
  )
, "ACCEPTED"
, [MIN CAR RESPONSE CODE] in (
    "0013"
  , "0018"
  , "0019"
  , ...
  )
, "INFORMATION"
, True
, "REJECTED"
)

您可以很容易地查找
Switch
函数的详细信息,但基本上它的工作原理类似于其他语言中的
case
语句或
Switch
语句,但SQL是方便的面向表达式的,因此您总是返回值。

我会在visual Basic中编写一个函数