2013-06-18 30 views
0

我有一個作業表,其中包含最後一次費用更新日期,工作收費,修訂合同金額和付款的字段。我只想返回記錄中的結算金額,合同金額和付款金額在行中相同。已添加SQL查詢條件返回錯誤的數據集

我有該作品的查詢:

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的記錄? 我正在使用ODBC連接到我的數據庫的Microsoft Access中運行此操作。

回答

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

這將返回一個額外括號的錯誤。我調整了它,但仍然不成功。 – user2497953

+0

是的,抱歉,我沒有看到您之前的額外套件。我調整了答案,並將其格式化爲括號匹配。 – Sablefoste

+0

@SableFoste恐怕我沒有按照你的理由爲額外的括號。 「在哪裏(A和B和C)'和'在哪裏(A和(B和C))'在邏輯上是等價的,不是嗎? –

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日之前尋找記錄。我確定你已經檢查過,但有時我們錯過了它< =用於之前的日期和> =用於之後的日期。