【问题标题】:SQL in Access, subquery pairing issueAccess中的SQL,子查询配对问题
【发布时间】:2016-07-14 11:59:56
【问题描述】:

我在 Access 中编写了一条 SQL 语句,该语句在其“代码”列中查找具有相同值的数据行,然后查看具有相同“代码”值的那些行并找到具有相反“货币 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]);

在图片中,您可以看到在前 4 行中,代码按预期填充了 2 对相反的“Money Amt”值。但是,在底部的 3 行中应该只有 1 对“999”,但它填充了奇数行。

如何让子查询仅填充相反对的 Line 字段。

Image from before I put in the current code

提前谢谢你。

【问题讨论】:

  • 我认为您也应该显示前表。假设有两条记录为+0.9,一条记录为-0.9,则底部的 3 行非常有意义。
  • 如果您有重复,这在 MS Access 查询中将很难做到。我可能会建议您在应用程序中执行此操作。其他数据库的功能可以在单个查询中实现。
  • 我添加了之前的。有没有办法编写代码,让它只做 2 对?
  • Gordon,您建议使用什么应用程序或数据库,之后我可以将其迁移回 Access 吗?
  • 此表中还有其他列可用于将这些对链接在一起吗?

标签: sql ms-access subquery


【解决方案1】:

现在 Gordon,我相信这可以在 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 - 这似乎是问题的根源

我会密切关注这篇文章,如果你编辑你的问题,那么我会编辑这个答案以提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多