我有一份工作表,其中的字段包括上次费用更新日期,工作结算,修订合同金额和付款。我想只返回记录,其中结算,合同和支付的金额在行中相等。
我有一个适用于此的查询:
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连接到我的数据库运行它。
答案 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; =对于之后的日期。