将SQL查询写入-
给定-不同公司的日级销售数据
1)为给定数据创建月份级别,年初至今级别数据。
年初至今-至今
年初至今(3月)= 1月+ 2月+3月
2)根据公司为步骤1中创建的数据创建总体级别。将其标记为“行业”
例如:行业= CompA + CompB + CompC + CompD
3)计算步骤2之后创建的数据的月份和年初至今的水平份额(值,数量)。
份额计算-公司/行业。
我知道我们可以在over子句中使用partition by,但是总的来说我不理解这个问题。
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
答案 0 :(得分:0)
从问题的声音看来,似乎要问的是总计层的表达方式。
您的查询效果很好,除行业总数外,它可以完成所有必需的工作。
下面的查询使用“汇总”,它使您可以根据从左到右排列的列生成层次分组。这样,您将获得所有行业的总计,每家公司所有年份的总计以及每家公司每年所有月份的总计。
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]))