使用Access sql的MS Access-空函数

时间:2019-02-17 01:02:00

标签: ms-access-2016

在访问中使用Null函数。

我有四个不同的报告。所有都有订单号。在报告A中填充订单号,其中订单号在报告B,C和D中与每个报告的单独列匹配。所以例如如果报表B中的报表编号与报表A中的匹配,则填充该订单编号,否则不填任何内容(我不知道这是空白还是空(如果没有匹配的订单编号))现在在填充三个中的每一个之后报告A中的列。 我想添加一个查询,该查询使用Null函数查看报表A中的每一列,并在其中找到任何列的订单号,然后如果所有列均为“ Null / Blank”,则说“ Either”,然后说“ None” “

我不是编码员。因此,如果您答复然后要求,请给我写一个确切的SQL,我可以通过更改报告名称来使用。

SELECT 
    [04_Match to Pending Consolidation].*,
    IIf(IsNull([Matched_Closed_Not_Invoiced_Report],0) + IsNull([Matched_Shipped_Not_Invoiced_report],0)+IsNull([Matched_Pending_Consolidation_Report],0),"NONE","EITHER REPORT") AS Validation 
FROM 
    [04_Match to Pending Consolidation];

我希望通过此查询在第四列中选择“是”或“无”。

2 个答案:

答案 0 :(得分:0)

我想它可以简化为:

SELECT 
    *,
    IIf(([Matched_Closed_Not_Invoiced_Report] + [Matched_Shipped_Not_Invoiced_report] + [Matched_Pending_Consolidation_Report]) Is Null, "NONE", "EITHER") AS Validation 
FROM 
    [04_Match to Pending Consolidation];

答案 1 :(得分:0)

可以通过多种方式编写表达式以达到相同的结果。如果给定表达式为空,则与当前代码最相似的方法可能是使用Nz函数返回0,例如:

SELECT 
    t.*,
    IIf
    (
        (
            Nz(t.[Matched_Closed_Not_Invoiced_Report], 0) + 
            Nz(t.[Matched_Shipped_Not_Invoiced_report], 0) + 
            Nz(t.[Matched_Pending_Consolidation_Report], 0)
        ) = 0,
        "NONE",
        "EITHER REPORT"
    ) AS Validation 
FROM 
    [04_Match to Pending Consolidation] t;

这当然假定每个有问题的字段在不为null时都具有一个数值。


另一种可能的方法是将布尔逻辑与Is Null运算符配合使用,例如:

SELECT 
    t.*,
    IIf
    (
        t.[Matched_Closed_Not_Invoiced_Report] Is Null And
        t.[Matched_Shipped_Not_Invoiced_report] Is Null And
        t.[Matched_Pending_Consolidation_Report] Is Null,
        "NONE",
        "EITHER REPORT"
    ) AS Validation 
FROM 
    [04_Match to Pending Consolidation] t;