0

我有一个工作表,其中的字段包括上次成本更新的日期、开单的工作、修订的合同金额和付款。我只想返回行中计费、签约和支付的金额相等的记录。

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

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)<=#12/31/2012#)

但是,当我添加日期条件时,它只返回 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 连接到我的数据库来运行它。

4

2 回答 2

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]);

很多括号降低了可读性

如果这不起作用,您是在寻找 2012 年 12 月 31 日之后还是之前的记录。我确定您已经检查过了,但有时我们会错过它 <= 表示之前的日期,>= 表示之后的日期。

于 2013-06-18T18:41:11.593 回答
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) )
于 2013-06-18T16:41:18.577 回答