对枢轴结果求和以获得产品的月销售额

问题描述 投票:0回答:1

我正在编写一个查询来获取每月销售额的结果,我只是缺少一列来汇总所有月份的总销售额。

https://dbfiddle.uk/oIclJV3u

查询:

create table sales(
    itemcode INT, name varchar(255), amount decimal(18,2), salesdate date);
insert into sales (itemcode, name, amount, salesdate)
values
(01, 'product1', 01, '2023-10-01'),
(01, 'product1', 5, '2023-11-03'),
(02, 'product1', 10, '2023-11-10')

SELECT * FROM (SELECT YEAR(SalesDate) [YEAR], DATENAME(MONTH, SalesDate) [Month], COUNT(1) [Amount Count], itemcode, Name FROM Sales
GROUP BY YEAR(SalesDate), DATENAME(MONTH, SalesDate), itemcode, Name) AS MonthlyDates
PIVOT (SUM([Amount COUNT])
FOR MONTH IN ([January],[February],[March],[April],[May],
    [June],[July],[August],[September],[October],[November],
    [December])) as MNAMEPIVOT

结果如下:

商品代码 姓名 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
2023 01 产品1 10 5 1 10 2 5 10 9 10 1
2023 02 产品2 5 100 65 10 32 8 89 6 46 2
2023 03 产品3 6 20 12 2
2023 04 产品4 6
2023 05 产品5 10 2 5 6 10 5 41 12 1

想要的结果:

商品代码 姓名 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 总销售额
2023 01 产品1 10 5 1 10 2 5 10 9 10 1 91
2023 02 产品2 5 100 65 10 32 8 89 6 46 2 454
2023 03 产品3 6 20 12 2 40
2023 04 产品4 6 6
2023 05 产品5 10 2 5 6 10 5 41 12 1 92
sql sql-server t-sql pivot
1个回答
0
投票

一种解决方案是从 salesdate 变量中提取月份,然后使用 GROUP BY 函数按月汇总销售额。

首先,可以创建一个单独的变量,如下所示:

alter table sales add month int;

然后可以提取月份:

update sales set month=extract(month from salesdate);

然后可以按月份和名称对销售额进行分组。根据您提供的样本数据,结果如下:

>>> select month, name, sum(amount) from sales group by month, name order by month;

 month |   name   |  sum  
-------+----------+-------
    10 | product1 |  1.00
    11 | product1 | 15.00
(2 rows)
© www.soinside.com 2019 - 2024. All rights reserved.