Запрос на создание данных уровня месяца и уровня YTD - PullRequest
1 голос
/ 10 мая 2019

Запись SQL-запросов в -
Данные - данные о продажах на уровне дня для разных компаний
1) Создайте уровень месяца, данные уровня YTD для данных.
С начала года до года
YTD (март) = январь + февраль + март
2) Создайте общий уровень на основе данных компании, созданной на шаге 1. Отметьте его как «Отрасль»
Например: промышленность = CompA + CompB + CompC + CompD
3) Рассчитать долю месяца и начала года (оба значения, объем) для данных, созданных после шага 2.
Расчет доли - Comp / Industry.

Я понял, что мы можем использовать секцию by over over, но в целом я не понимаю вопроса.

schema:

[Period] - date
[Company]- nvarchar
[Metric] - nvarchar
[Values] - Float

Period      Company Metric           Values

01-01-2018  CompA   Sales Vol   72947.30664

02-01-2018  CompA   Sales Vol   21553.65941

03-01-2018  CompA   Sales Vol   777.6831962

04-01-2018  CompA   Sales Vol   34871.11234

05-01-2018  CompA   Sales Vol   42598.06526

Я пытался использовать раздел по месяцам и годам. но мне не ясно, если это то, что ожидается.

 SELECT YEAR([Period]) AS Year,
        MONTH([Period]) as month,
        MTD  = SUM([Values]) OVER (PARTITION BY year([period]),month([period]) order by period),
        YTD  = SUM([Values]) OVER (PARTITION BY Year([period]) order by period)
        FROM  DP

1 Ответ

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

Из звуков вопроса кажется, что то, что задают, является выражением слоев итогов.

Ваш запрос работает хорошо и выполняет все необходимые операции, кроме общего для отрасли.

В приведенном ниже запросе используется «свертка», которая позволяет генерировать иерархические группировки на основе столбцов, идущих слева направо. Таким образом, вы получите общую сумму по всем отраслям, итоговую сумму за все годы по компании и итоговую сумму за все месяцы в году по компании.

declare @sales table

(
    [Period] date,
    [Company] nvarchar(50),
    [Metric] nvarchar(50),
    [Values] float
);

insert @sales ([Period], [Company], [Metric], [Values])
values
('01-01-2018',  'CompA',   'Sales Vol',   72947.30664),
('02-01-2018',  'CompA',   'Sales Vol',   21553.65941),
('03-01-2018',  'CompA',   'Sales Vol',   777.6831962),
('04-01-2018',  'CompA',   'Sales Vol',   34871.11234),
('05-01-2018',  'CompA',   'Sales Vol',   42598.06526);

SELECT coalesce(Company,'Industry') as Company, coalesce(cast(YEAR([Period]) as nvarchar(50)), 'All Years') AS Year,
        coalesce(cast(MONTH([Period])as nvarchar(50)),'All Months') as month, coalesce(sum([values]),0) as sales
        FROM  @sales
        group by rollup (company, year([period]), month([period]))
...