sql - 使用日期将年销售额拆分为月销售额
问题描述
我对 SQL 很陌生,但希望你能在这个逻辑上帮助我。我需要帮助才能在 SQL Server(SQL Server Management Studio)中编写这个函数。我有一个发布日期,以及以年为单位的销售额。
目前我的数据如下所示:
销售表
项目名称 | 发射日期 | 销售 Y1 | 销售 Y2 |
---|---|---|---|
项目一 | 2021-01-01 | 15000 | 25000 |
项目 2 | 2021-06-01 | 15000 | 25000 |
项目 3 | 2021-03-01 | 10000 | 60000 |
项目 4 | 2021-12-01 | 75000 | 70000 |
我想把它改成
预报
项目名称 | 销售月份 | 销售量 |
---|---|---|
项目一 | 2021-01-01 | 1250 |
项目一 | 2021-02-01 | 1250 |
项目一 | 2021-03-01 | 1250 |
项目一 | 2021-04-01 | 1250 |
项目一 | 2021-05-01 | 1250 |
项目一 | 2021-06-01 | 1250 |
项目一 | 2021-07-01 | 1250 |
项目一 | 2021-08-01 | 1250 |
项目一 | 2021-09-01 | 1250 |
项目一 | 2021-10-01 | 1250 |
项目一 | 2021-11-01 | 1250 |
项目一 | 2021-12-01 | 1250 |
项目一 | 2022-01-01 | 2083 |
项目一 | 2021-03-01 | 2083 |
项目一 | 2021-04-01 | 2083 |
项目一 | 2021-05-01 | 2083 |
项目一 | 2021-01-01 | 2083 |
项目一 | 2021-02-01 | 2083 |
项目一 | 2021-03-01 | 2083 |
等等... |
所以它所做的是将年度销售额(Sales Y1)分成 12 行,放在发布日期之后,而不是其他 12 行(Sales Y2),并将其他 12 行放在前 12 行之后。
这在 SQL 中可能吗?
解决方案
你可以试试这个:
with ydata as (
select 'Project 1' as ProjectName, convert(date,'2021-01-01') as LaunchDate, 15000 as SalesY1,25000 as SalesY2 union all
select 'Project 2','2021-06-01',15000,25000 union all
select 'Project 3','2021-03-01',10000,60000 union all
select 'Project 4','2021-12-01',75000,70000
),
mnt as (
select 1 as n, convert(date,'20210101',112) as d
union all
select n + 1, dateadd(month,1,d)
from mnt
where n < 24
)
select
ProjectName, d as SalesMonth,
case
when year(d) = 2021 then SalesY1/12
else SalesY2/12
end as Sales
from mnt m
cross join ydata d
order by ProjectName, d
推荐阅读
- javascript - 如何检查 if 条件中仅存在 hasData 属性
- html - 如何使页眉触摸页面顶部?
- javascript - 函数行查询mysql返回未定义
- ios - 在IOS中上传带参数的多部分图像
- python - 如何解决 keras 上的错误“分配超过 10 的系统内存”?
- php - 没有 SMTP 的 CodeIgniter 电子邮件不起作用
- java - 检查映射中的键是否与 Java 中的 List 内容匹配
- ios - 如何在键盘中获取 inputAssistantItem 的高度?
- python - 散景是否有 matplotlib contourf 等价物?
- excel - 重用/复制宏从一个文件到另一个文件