【问题标题】:MS ACCESS - cannot subtract returned values from a query from values in another tableMS ACCESS - 不能从另一个表中的值中减去从查询中返回的值
【发布时间】:2019-02-07 04:02:28
【问题描述】:

我有两个表:Project 和 Invoice

项目表:

ID   |   UR_No   |  Budget_Total  |  Budget_To_Date
1    |  329000   |   150000.00    |
2    |  403952-C |   33000        |

发票表:

ID   |   URID   |  InvAmount
1    |  329000  |  157.00
2    |  329000  |   32.00
3    |  403952-C|  193.00

发票表包含向项目收取的金额。一个项目具有唯一的 UR 编号 (UR_No),而发票具有重复的 UR 编号 (URID),这意味着同一个项目按月计费并且具有不同的发票编号。

我想要实现的是:

ID   |   UR_No   |  Budget_Total  |  Budget_To_Date
1    |  329000   |   150000.00    |   149811.00
2    |  403952-C |   33000        |   32807

首先,对 Invoice 表进行聚合查询,以获取向项目收取的总金额:

SELECT Invoice.URID, Sum(Invoice.InvAmount) AS total
FROM Invoice
GROUP BY Invoice.URID;

这将返回以下内容:

URID    |  InvAmount
329000  |  189.00
403952-C|  193.00

然后将其导出到数据库中名为 Invoice_Totals 的表中

然后我想使用 UR_No 和 URID 将 Invoice_Totals 表连接到 Project 表,并通过从 project 表中名为 Budget_total 的字段中减去查询表中的 Invoice_Totals.total 来计算 Project 表中的空现有字段“Budget_to_Date” .在尝试之前,我只想让查询返回值:

SELECT Project.Budget_Total - Invoice_Totals.total 
FROM Project INNER JOIN Invoice_Totals ON Project.UR_No = Invoice_Totals.URID;

这会返回错误: 无法加入备注、OLE 或超链接对象 (Project.UR_No=Invoice_Totals.URID)

我查找了一个 SO 帖子并尝试使用左 255:

SELECT Project.Budget_Total - Invoice_Totals.total 
FROM Project INNER JOIN Invoice_Totals ON left(Project.UR_No,255) = left(Invoice_Totals.URID, 255);

这不返回任何内容。如果可能,我如何从 Project 表中 Budget_To_Date 字段或新字段中的预算总额中减去聚合字段?

【问题讨论】:

  • 如果UR_No和URID都是号码类型,应该可以加入。 UR_No 是自动编号字段吗? URID 是长整数类型吗?编辑问题以将两个表的示例数据作为文本提供。我怀疑这个问题可以归咎于 Access。我从来没有遇到过这个问题。 Budget_to_Date 不应是表中的字段。此值应在需要时在查询中计算。
  • URNO 和 URID 是长文本字段(有些数字有字母,所以必须使用这种数据类型)
  • @June7 我添加了示例表
  • 嗯,有问题的根源。 LongText 是备忘录类型的同义词。应该使用短文本。肯定不会超过 255 个字符。但是,确实应该使用 Project 表中的 ID 字段作为主键并将其而不是 UR_No 保存到 Invoice 表中。数字是更有效的键。
  • @june7 将 URID、UR_No 更改为短文本,这对于第一次操作效果更好。当我尝试从 Project_Budget_Total 中减去第一个查询中的聚合结果时,我得到一个空结果。 SELECT Project.Budget_Total - Invoice_Total.total FROM Project INNER JOIN Invoice_Total ON Project.UR_No = Invoice_Total.URID;

标签: sql ms-access


【解决方案1】:

您的评论指出链接字段是 LongText,它与 Memo 数据类型同义,因此错误消息清楚地确定了原因。将字段类型更改为 ShortText。

但是,确实应该使用 Project 表中的 ID 字段作为主键并将其而不是 UR_No 保存到 Invoice 表中。数字是更有效的键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    相关资源
    最近更新 更多