【问题标题】:sql sum data from multiple tables with entries from both tablessql sum 来自多个表的数据以及来自两个表的条​​目
【发布时间】:2017-11-09 17:56:55
【问题描述】:

我有 2 个表 tbl1 和 tbl2,它们都有 [PartID] 和 [Amount] 和 [Date] 列。

我希望查询返回如下内容:

PartID | Date | SUM_tbl1 | SUM_tbl2

PartID 1 可能在 tbl1 中但不在 tbl2 中,反之亦然,每个 PART ID 在两个表中都有多行。

我希望两个 SUM 列都显示该表中每个部件 ID 的 SUM。我希望看到截至 2017 年 6 月 30 日的 SUM。

请帮忙!谢谢!

【问题讨论】:

  • 欢迎来到 Stack Overflow。请明确说明您使用的是哪个 RDBMS。是 MySQL 还是 MS Access(或者可能是带有与 MySQL 的链接表的 MS Access?)
  • 嗨 Erik,这是 MS Access,只是在 SQL 视图中运行查询。

标签: sql ms-access


【解决方案1】:

最简单的?首先,使用 UNION 将单个表与您需要的原始行组合起来:

select PartID, Date, Amt as Table1Entry, NULL as Table2Entry from tbl1
UNION ALL
select PartID, Date, NULL as Table1Entry, Amt as Table2Entry from tbl2

...接下来,既然您已经将两个表的数据放在一起,只需将其作为子查询求和即可:

select PartID, Date, Sum(Table1Entry) as SumTable1, Sum(Table2Entry) as SumTable2
from
(
    select PartID, Date, Amt as Table1Entry, NULL as Table2Entry from tbl1
    UNION ALL
    select PartID, Date, NULL as Table1Entry, Amt as Table2Entry from tbl2
) mySubquery
GROUP BY PartID, Date

【讨论】:

  • 非常感谢。有人可以告诉我如何在其中插入 WHERE 子句来查找 tbl1 和 tbl2 列的金额总计 - 比如在 2017 年 8 月 31 日之前。或者,如果我可以在查询输出中插入一行,在每个月底给我汇总 SUM,那就更好了!
  • 老实说,您可以在任一部分执行 WHERE 子句。这样想,那个“子查询”?它就像主查询所针对的表。因此,您可以在主查询中放置一个 WHERE 子句,这将过滤掉子查询中 的条目,或者将其放在子查询本身中。不用担心任何一种方式的效率——SQL 引擎擅长优化(它不像是用子查询中的所有记录创建一个实际的表。)
  • 我还有一个问题:tbl_1 有 PartID、Part Type、Year Begin、Year End、CompID、Service Date、 Effective Date、Description、Type、Ref#、Date Cleared。 tbl_2 具有 PartID、Part Type、CompID、Trasanction Date、Amount、Description、Invoice#。我想合并这两个表。来自 tbl_2 的交易日期可以重命名为服务日期。来自 tbl_2 的类型可以重命名为描述,来自 tbl_2 的发票#可以重命名为 Ref#。 PartID、Part Type 和 CompID 具有相同的字段名称。
  • 看看我的回答中的第一个 sn-p - 并注意它使用列名的地方,以及它使用 NULL 的地方。当它从 tbl1 中获取时,请注意它是如何创建一个只是 NULL 的“Table2Entry”?那是因为它正在创建一个与 tbl2 中的条目对齐的列(没有数据)。如果有帮助,请尝试自己运行这两个 SELECT 查询,看看它如何创建具有完全相同列的两个结果。这就是您需要对表执行的操作 - 创建两个具有相同列的 SELECTS(然后您可以将它们全部合并。)
  • 或者换一种说法:如果您有一个包含 ID、Alpha、Bravo、Charlie 列的表和另一个包含 ID、Alpha 和 Zulu 列的表,您的选择语句将是:“Select ID, Alpha , Bravo, Charlie, NULL as Zulu”和“Select ID, Alpha, NULL as Bravo, NULL as Charlie, Zulu”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2022-01-03
  • 1970-01-01
相关资源
最近更新 更多