【问题标题】:Access criteria not equal to zero访问标准不等于零
【发布时间】:2017-12-30 08:03:13
【问题描述】:

我无法使用以下查询过滤掉零字段。许多“3 年平均”或“Comp Usage”字段为零的记录仍包含在结果中。

删除“0”或“Is Not Null”标准不会改变输出表中的任何内容。 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]; 

感谢您的帮助。

【问题讨论】:

    标签: sql ms-access ms-access-2007


    【解决方案1】:

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

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

    <>0 And Is Not Null
    
    "X" Or "Y" Or "Z"
    

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

    【讨论】:

      【解决方案2】:

      也许使用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 年平均或 comp 使用量均为 null 或零的情况下,记录将被排除在外。

      【讨论】:

      • IsNull 在 Access 中不起作用,您需要使用 Nz(Expression,0)
      • 我知道...在Thursday上使用它...只是没有足够的访问权限来记住它..谢谢。我只是希望合并得到支持。对于大多数引擎来说,这是我的 defactor 将 null 更改为某些东西。以及不...的情况...
      • 另请注意:因为这是一个create table语句,所以order by是不必要的;只是吃时间。从创建的表中选择应该有顺序。插入的顺序并没有任何帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多