2016-07-14 37 views
0

我在Access中編寫了一條SQL語句,它在其「代碼」列中查找具有相同值的數據行,然後查看具有相同「代碼」值的行,並查找具有與'Money Amt'列值相反(例如,一行將具有200的值,另一行將具有-200),當找到具有相同代碼的這些相反值對時,標記爲行的列然後填充有數字'999' 。Access中的SQL,子查詢配對問題

問題是,我的一些行在奇數組中配對,而不是由2對配對組成。我希望在那裏存在對於相反值的1:1關係,以便它們基本上相互抵消。

下面是我用來得到結果的代碼。

UPDATE [Actual Debt] 
SET LineItem = 999 
WHERE EXISTS 
    (SELECT * FROM [Actual Debt] as ad2 
    WHERE ad2.Code = [Actual Debt].Code 
    AND ad2.[Money Amt] = - [Actual Debt].[Money Amt]); 

enter image description here

在圖片中可以看到,在第一個4行的代碼填充2對如預期相對「金錢金額」的值。但是,在最下面的3行中應該只有1對'999',而是填充了奇數行。

如何讓子查詢僅填充反向對的行字段。

Image from before I put in the current code

預先感謝您。

+0

我想你應該也顯示前面的表格。假設有兩個記錄帶有'+ 0.9'和一個帶有'-0.9'的記錄,底部的3行表示完美感。 –

+0

如果你有重複的話,這在MS Access查詢中很難做到。我可能會建議你在應用程序中執行此操作。其他數據庫具有在單個查詢中實現此功能的功能。 –

+0

我加了之前。有沒有辦法編寫代碼,以便它只能做2對? – Mccormack

回答

0

現在戈登我相信這可以在MS Access中完成。你可以在Access中做所有的事情,你可以在其他數據庫中完成它,只需要弄清楚如何。但是,在這種特殊情況下,似乎存在導致當前問題的底層數據的問題,並且在沒有看到整個源表的情況下很難確定該錯誤是什麼。不過,我還是冒險猜測,如果你自己運行了子查詢(就像我下面展示的那樣),你會得到如下所示的數據。嘗試運行查詢的SELECT部分​​,看看你得到了什麼。

SELECT * 
    FROM ActualDebt AS Ad2 

WHERE Ad2.Code = ActualDebt.Code 
    AND Ad2.MoneyAmt = ((-1) * ActualDebt.MoneyAmt); 

最有可能的查詢結果是基於我在你的表格中看到

Code | MoneyAmt 
MHT  .3 
MHT  .3 
MHT  -.3 
MHT  -.3 
RLO  .4 
RLO  .6 
MQR  .9 
MQR  -.9 
MQR  .9 

那麼戈登,如果上面我所概括,就是這個問題,然後是你需要提供如下更多的信息,以便確定一個解決方案,因爲編程方式現在將無法區分第一個MQR .9和其他MQR .9 - 這似乎是問題的根源

我會留意這篇文章,如果你編輯你的問題然後我會編輯這個答案來幫助。