我正在尝试从多个表中获取数据并进行一些求和。数据结构如下:
TransHeader
TransDetail
每个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表上每个匹配项的单位。
答案 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;