添加的SQL查询条件返回错误的数据集

时间:2013-06-18 16:33:15

标签: sql ms-access select

我有一份工作表,其中的字段包括上次费用更新日期,工作结算,修订合同金额和付款。我想只返回记录,其中结算,合同和支付的金额在行中相等。

我有一个适用于此的查询:

SELECT *
FROM JCM_MASTER__JOB
WHERE (((JCM_MASTER__JOB.JTD_Work_Billed)=[Revised_Contract_Amount]) AND          
((JCM_MASTER__JOB.JTD_Payments)=[JTD_Work_Billed]));

但是,我还有其他标准,例如上次费用输入的日期     ((JCM_MASTER__JOB.Last_Cost_Update)LT =#2012年12月31日#)

当我添加日期条件时,它只返回JTD_Work_Billed,Revisited_Contract_Amount和JTD_Payments等于0的记录。

完整查询:

SELECT *
FROM JCM_MASTER__JOB
WHERE (((JCM_MASTER__JOB.Last_Cost_Update)<=#12/31/2012#) AND         
((JCM_MASTER__JOB.JTD_Work_Billed)=[Revised_Contract_Amount]) AND  
((JCM_MASTER__JOB.JTD_Payments)=[JTD_Work_Billed]));

为什么这只返回结算,合同和付款为0的记录? 我在Microsoft Access中使用ODBC连接到我的数据库运行它。

2 个答案:

答案 0 :(得分:0)

尝试:

SELECT *
FROM JCM_MASTER__JOB
WHERE (
  (
   (JCM_MASTER__JOB.Last_Cost_Update<=#12/31/2012#)
  ) AND
  (
   (JCM_MASTER__JOB.JTD_Work_Billed=[Revised_Contract_Amount]) AND  
   (JCM_MASTER__JOB.JTD_Payments=[JTD_Work_Billed])
  )
);

我在第一个标准附近添加了一组额外的括号。

假设您的WHERE子句被A,B和C参数替换,您总是想要A,而如果C为真,则只需要B,如果B为真,则只需要C.所以:

WHERE (  (A) AND (B AND C) )

答案 1 :(得分:0)

尝试

SELECT *
FROM JCM_MASTER__JOB
WHERE (JCM_MASTER__JOB.Last_Cost_Update<=#12/31/2012# AND JCM_MASTER__JOB.JTD_Work_Billed=[Revised_Contract_Amount]) AND (JCM_MASTER__JOB.JTD_Payments=[JTD_Work_Billed]);

很多这些括号都降低了可读性

如果这不起作用,您是否在12/31/2012之后或之前查找记录。我确定你已经检查了,但有时我们会错过它&lt; =是先前的日期和&gt; =对于之后的日期。