Access中的SQL,子查询配对问题

时间:2016-07-14 11:59:56

标签: sql ms-access subquery

我在Access中编写了一个SQL语句,用于查找“' Code”中的相同值的数据行。列,然后查看具有相同'代码'值并查找具有相反' Money Amt'的行。列值(例如,一行的值为200,另一行的值为-200),标有行的列将填入数字' 999'当找到具有相同代码的这些相反值的对时。

问题是我的一些行在奇数组中配对而不是在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对反对的Money Amt'价值如预期。但是,在底部的3行中,应该只有1对' 999',而是填充了奇数行。

如何使子查询仅填充对方的“线”字段。

Image from before I put in the current code

提前谢谢你。

1 个答案:

答案 0 :(得分: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

所以Gordon如果我上面提到的是问题,那么是的,你需要提供更多信息才能确定解决方案,因为现在以编程方式无法区分第一个MQR .9和其他MQR .9 - 这似乎是问题的根源

我会留意这篇文章,如果你编辑你的问题,我会编辑这个答案来帮助你。