sql - 多个日期之间的聚合
问题描述
我有这个数据集,其结构或多或少类似于以下内容:
产品 | 销售价值 | 销售数量 | 销售日期 | 第一期开始 | 第一期结束 | 第 2 阶段开始 | 第 2 阶段结束 |
---|---|---|---|---|---|---|---|
XXX | 6 | 2 | 2021-05-20 | 2021-05-15 | 2021-05-21 | 2021-05-22 | 2021-06-01 |
年年 | 10 | 3 | 2021-05-21 | 2021-05-15 | 2021-05-21 | 2021-05-22 | 2021-06-01 |
XXX | 3 | 1 | 2021-05-23 | 2021-05-15 | 2021-05-21 | 2021-05-22 | 2021-06-01 |
XXX | 6 | 2 | 2021-05-24 | 2021-05-15 | 2021-05-21 | 2021-05-22 | 2021-06-01 |
我想将“销售价值”和“销售数量”列相加,然后再创建 4 个列,分别称为“期间 1 销售额”、“期间 1 数量”、“期间 2 销售额”和“期间 2 数量”。
例如,使用上面的数据,我将获得四个新列,而行将按产品分组:
产品 | 第一期开始 | 第一期结束 | 第 2 阶段开始 | 第 2 阶段结束 | 第 1 期销售价值 | 第 1 期销售数量 | 第 2 期销售价值 | 第 2 期销售数量 |
---|---|---|---|---|---|---|---|---|
XXX | 2021-05-15 | 2021-05-21 | 2021-05-22 | 2021-06-01 | 6 | 2 | 9 | 3 |
年年 | 2021-05-15 | 2021-05-21 | 2021-05-22 | 2021-06-01 | 0 | 0 | 10 | 3 |
我正在使用 SQL Server,现在我几乎陷入困境。
到目前为止,我设法交叉加入我的日历表和销售表,以获得第一个矩阵中描述的表。
有人可以帮忙吗?
非常感谢!
解决方案
以下提供了您想要的结果,但您的 YYY 值除外,在您的示例数据中,值位于周期 1 而不是周期 2。
select Product,
Period1start, Period1end, Period1start, Period2end,
Sum(P1sales) Period1Sales, Sum(P1Qty) Period1Qty,
Sum(P2sales) Period2Sales, Sum(P2Qty) Period2Qty
from t
cross apply(values(case when SalesDate between Period1start and Period1end then SalesValue else 0 end) )p1s(P1sales)
cross apply(values(case when SalesDate between Period1start and Period1end then SalesQty else 0 end) )p1q(P1Qty)
cross apply(values(case when SalesDate between Period2start and Period2end then SalesValue else 0 end) )p2s(P2sales)
cross apply(values(case when SalesDate between Period2start and Period2end then SalesQty else 0 end) )p2q(P2Qty)
group by product, Period1start, Period1end, Period1start, Period2end
推荐阅读
- javascript - 将变量传递给 .then 异步函数
- java - 需要从服务器获取用户当前详细信息
- angular - Ionic 4等待异步方法返回
- reactjs - 启动反应应用程序时面临 fs-extra、html-webpack-plugin-before-html-processing、graceful-js 问题
- c# - 具有匹配泛型参数的泛型类不是有效的基类
- javascript - 请问这个Javascript计算器有什么问题?
- python - 如何在带有条件的字典中添加值?
- android - 从父 Activity 还是从 Fragment 导航?
- postgresql - Docker golang gin postgres
- angular - 如何在 Angular 应用程序中将图像上传到图像到 imgur?