【发布时间】: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;