访问case语句以从多个字段返回值

时间:2014-03-25 17:32:01

标签: ms-access access-vba

我努力在Access VBA中编写一个case语句来执行在满足案例时引用某个字段应该是相对直接的任务。

说我有一张表ID,产品类型,数量,金额,总数

QTY,Amount和Total都意味着相同的事情,但表中显示的内容取决于产品类型。即,如果产品类型为1,则“数量”为“数量”。如果产品类型= 2,则会填充字段,然后是“金额”字段。字段将填充。

我尝试做的是为查询编写一个函数,该查询引用结果的特定字段并生成如下内容:

如果Type = 1,则参考Quantity的结果,如果type = 2,则参考Total的结果等。之前使用iif语句引用正确的列(iif([MainTable]![输入] =" 1",[主表格]![数量],但是在我的真实表格中有太多变量用于' Type'所以这不再做了..

Public Function TotalAmount(Type As String)

    Select Case Type

        Case "1"
            TotalAmount = "Quantity"

        Case "2"
            TotalAmount = "Total"

        Case "3"
            TotalAmount = "Amount"

    End Select

我对编码很陌生,所以我不知道如何参考特定字段的结果,这就是我所拥有的。

1 个答案:

答案 0 :(得分:2)

在查询中考虑Switch表达式来评估这些情况并返回正确字段的值。 (您可能不需要自定义VBA功能。)

SELECT
    ID,
    [Product Type],
    Switch
        (
            [Product Type] = '1', [QTY],
            [Product Type] = '2', [Total],
            [Product Type] = '3', [Amount]
        ) As TotalAmount
FROM YourTable;

注意Switch逻辑类似于您在VBA函数中使用的Select Case。所以我希望这个建议相当清楚。如果不够清楚,请查看Access'中的切换功能主题。内置帮助系统。

在评论中,当[Amount]为" 3"," 4"或"时,您表示您希望[Product Type]作为返回的字段5&#34 ;.您可以调整Switch建议来实现...

    Switch
        (
            [Product Type] = '1', [QTY],
            [Product Type] = '2', [Total],
            [Product Type] In ('3','4','5'), [Amount]
        ) As TotalAmount