SQL:多表,一对多,多和查询

时间:2019-01-09 17:24:04

标签: sql sum hierarchy multi-level

我正在尝试从多个表中获取数据并进行一些求和。数据结构如下:

TransHeader

  • TranDate
  • TranNbr
  • 单位

TransDetail

  • TranNbr
  • TranWeight
  • TranTime

每个TransHeader都有多个TransDetail记录。

有大量的数据,所以我试图总结以获取如下输出:

日期,总单位,总重量,总时间

其中每行将按日期表示总数。

这是我失败的尝试:

select th.TranDate, sum(th.Units), sum(td.TranWeight), sum(td.TranTime)
from TransHeader th join
     TransDetail td
     on td.TranNbr = th.TranNbr
group by th.TranDate;

对于TranWeight和TranTime来说效果很好,但是Units夸大了,因为它累加了TransDetail表上每个匹配项的单位。

1 个答案:

答案 0 :(得分:0)

这很棘手,因为您是沿着层次结构进行聚合。也许最简单的方法是聚合的两个层次:

select th.TranDate, sum(th.Units), sum(td.TranWeight), sum(td.TranTime)
from TransHeader th join
     (select td.TranNbr, sum(td.TranWeight) as TranWeight, sum(td.TranTime) as TranTime
      from TransDetail td
      group by td.TranNbr
     ) td
     on td.TranNbr = th.TranNbr
group by th.TranDate;