Получить месяц мудрый с начала года - PullRequest
1 голос
/ 08 января 2020

У меня есть данные в таблице, как показано ниже.

Company  period      sales
-------------------------
a        2018-01-01   21
a        2018-02-01   22
a        2018-03-01   23
b        2018-01-01   24 
b        2018-02-01   25
b        2018-03-01   26

Мой желаемый результат выглядит следующим образом:

comp  year month  YTD values                      MTD values
---------------------------------------------------------------------------
a     2018 jan   <sum of sales in jan 2018>      <sum of sales in jan 2018>
a     2018 feb   <sum of sales in jan+feb 2018>  <sum of sales in feb 2018>

и так далее в течение следующих месяцев.

Я пытался с помощью следующего запроса:

SELECT Company
    ,month(period)
    ,sum(sales) AS MTD
FROM tablea
WHERE datediff(year, period, getdate()) = 0
GROUP BY month(period)
    ,company
ORDER BY company
    ,month(period)

Здесь я получаю правильное значение для mtd, но я также хочу включить новый столбец YTD, который дает cumulative sum or running total. Как я могу это сделать?

1 Ответ

2 голосов
/ 08 января 2020

Вы можете использовать агрегацию и оконных функций:

select
    company,
    year(period) yr,
    month(period) mn,
    sum(sales) mtd,
    sum(sum(sales)) over(partition by company, year(period) order by month(period)) ytd
from tablea
group by 
    company,
    year(period),
    month(period)
order by 
    company,
    year(period),
    month(period)

Демонстрация в DB Fiddlde :

company |   yr | mn | mtd | ytd
:------ | ---: | -: | --: | --:
a       | 2018 |  1 |  21 |  21
a       | 2018 |  2 |  22 |  43
a       | 2018 |  3 |  23 |  66
b       | 2018 |  1 |  24 |  24
b       | 2018 |  2 |  25 |  49
b       | 2018 |  3 |  26 |  75
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...