2017-07-24 49 views
0

我无法使用下面的查询过滤出零字段。在“3年平均”或“比较用法”字段中有许多记录的零点仍然包含在结果中。访问条件不等于零

Query

卸下“<> 0”或“不为空”的标准没有改变在输出表中。访问正在生成以下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]; 

感谢您的帮助。

回答

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+") 

或者声明通常对于引擎评估来说是昂贵的;所以如果我们可以使用IN同时进行多个评估,我们就可以获得性能优势。

使用nz我们将零值转换为0,然后从结果中排除零。所以在3年平均或比较用量为空或零的情况下,记录被排除。

+1

IsNull在Access中不能像那样工作,您需要使用Nz(Expression,0) – Minty

+0

我知道......在[Thursday](https://stackoverflow.com/questions/45222393/)上使用它sql-code-efficiency-compiling-issues-with-microsoft-access#comment77411148_45222393)...只是不玩w/access足以记住..谢谢你。我只是希望coalesce得到支持。这是我的defactor更改null为大多数引擎。以及当不... – xQbert

+1

另请注意:由于这是一个create table语句,所以order by是不必要的;只是吃时间。从创建的表中选择应该有按顺序。插入的顺序并不能真正帮助任何事情。 – xQbert

1

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

使用单行和And(或Or)关键字。实施例(在单个小区中键入):

<>0 And Is Not Null 

"X" Or "Y" Or "Z" 

或重复为每个 “X” 的第一表达, “Y” 等,行。