我正在编写一个查询来获取每月销售额的结果,我只是缺少一列来汇总所有月份的总销售额。
查询:
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 |
一种解决方案是从 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)