Рассчитать итоги года, итого за период и итогов за предыдущий год, итого за предыдущий период - PullRequest
0 голосов
/ 21 мая 2019

У меня есть таблица с продажами. Таблица содержит номер клиента, дату и сумму продажи. Теперь я должен рассчитать следующие значения - например, с периодом 01.01.2009 и 03/31/2019

  • Итого за период с 01.01.2009 по 31.03.2009 (= итоги периода)
  • Итого за период с 01.01.08 по 31.03.08 (= итоги за предыдущий год)
  • Всего за период с 01.01.2009 по 31.12.2009 (= итоги за год)
  • Итого за период с 01.01.08 по 31.12.2008 (= итоги за предыдущий год)

все эти значения сгруппированы по CustomerNo.

Как я могу сделать это по-исполнительски? Могу ли я использовать функции окна для этого случая?

1 Ответ

0 голосов
/ 21 мая 2019

К сожалению, в этом случае нельзя использовать оконные функции, потому что вы не можете перемещаться в пределах разделов, используя даты, т.е. суммировать все продажи для клиента за сегодня минус один месяц.Я предполагаю, что невозможно иметь транзакцию для каждого клиента каждый день (тогда можно использовать оконные функции).Я бы начал с чего-то вроде этого:

select 
     CustomerNo
    ,sum(case when [Date] >= '2019-01-01' and [Date] <= '2019-03-31' then Amount else 0 end ) as PeriodTotal
    ,sum(case when [Date] >= '2018-01-01' and [Date] <= '2018-03-31' then Amount else 0 end ) as PreviousYearPeriodTotal
    ,sum(case when [Date] >= '2019-01-01' and [Date] <= '2019-12-32' then Amount else 0 end ) as YearTotal
    ,sum(case when [Date] >= '2018-01-01' and [Date] <= '2018-12-32' then Amount else 0 end ) as PreviousYearTotal
from sales
group by CustomerNo
...