访问条件不等于零

Access criteria not equal to zero

我在使用下面的查询过滤掉零字段时遇到问题。许多在“3 年平均值”或 "Comp Usage" 字段中为零的记录仍包含在结果中。

删除“<>0”或 "Is Not Null" 条件不会改变输出 table。 Access 正在生成以下 SQL:

SELECT 
[active plant parts made from dept produced components usage].assembly_item_no, 
[active plant parts made from dept produced components usage].component_item_no, 
[active plant parts made from dept produced components usage].component_qty, 
[active plant parts made from dept produced components usage].[3 yr average], 
[active plant parts made from dept produced components usage].[comp usage], 
noetix_sys_invus_category_all.[a$cat$item_type] 
INTO   [department component usage and assembly type] 
FROM   [active plant parts made from dept produced components usage] 
       INNER JOIN noetix_sys_invus_category_all 
               ON 
[active plant parts made from dept produced components usage].assembly_item_no = 
noetix_sys_invus_category_all.[a$item$item_number] 
WHERE  ( ( ( 
[active plant parts made from dept produced components usage].[3 yr average] 

) 
<> 0 ) 
  AND ( ( 
  [active plant parts made from dept produced components usage].[comp usage] ) 
<> 0 ) 
  AND ( ( noetix_sys_invus_category_all. [a$cat$item_type] ) = "aft" ) ) 
 OR ( ( ( 
[active plant parts made from dept produced components usage].[3 yr average] 
) 
IS NOT NULL ) 
  AND ( ( 
  [active plant parts made from dept produced components usage].[comp usage] 
        ) 
    IS NOT NULL ) 
  AND ( ( noetix_sys_invus_category_all.[a$cat$item_type] ) = "aft+" ) ) 
OR (( ( noetix_sys_invus_category_all.[a$cat$item_type] ) = "oem" )) 
OR (( ( noetix_sys_invus_category_all.[a$cat$item_type] ) = "oem+" )) 
ORDER  BY 
[active plant parts made from dept produced components usage].[3 yr average] DESC, 
[active plant parts made from dept produced components usage].[comp usage] DESC, 
noetix_sys_invus_category_all.[a$cat$item_type]; 

感谢您的帮助。

读取条件行是一个 AND 语句,因此,例如,Is Not Null 仅适用于 "AFT+"。

使用单行和 And(或 Or)关键字。示例(在单个单元格中键入):

<>0 And Is Not Null

"X" Or "Y" Or "Z"

或对每个 "X"、"Y" 等行重复第一个表达式。

也许可以使用 innz 进行简化。我说也许是因为我不完全确定你想要的预期结果是什么。

WHERE nz([Active Plant Parts Made From Dept Produced Components Usage].[3 Yr Average],0)<>0
  AND nz([Active Plant Parts Made From Dept Produced Components Usage].[Comp Usage],0)<>0 
  AND NOETIX_SYS_INVUS_CATEGORY_ALL.[A$CAT$ITEM_TYPE] in("AFT","AFT+","OEM","OEM+")

Or 语句通常对引擎进行评估很昂贵;因此,如果我们可以使用 IN 一次进行多项评估,我们将获得性能优势。

我们使用 nz 将空值转换为 0,然后将其从结果中排除。因此,在 3 年平均值或补偿使用量均为空或零的情况下,该记录将被排除。