SQL: Multi Table, один ко многим, Multi Sum запрос - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь получить данные из нескольких таблиц и провести суммирование. Структура данных выглядит следующим образом:

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, но единицы оказываются чрезмерно раздутыми, поскольку суммируют единицы для каждого попадания в таблицу TransDetail.

1 Ответ

0 голосов
/ 09 января 2019

Это сложно, потому что вы агрегируете по иерархии. Пожалуй, самый простой метод - это два уровня агрегации:

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;
...