如何解决SQL在定义的时间范围内将累积值分解为单个值
我有一张图,如下图1所示,我试图将每个日期和每个部门的累计收入分解为单个利润。
但是,我使用的方法非常愚蠢,如果日期范围过大(即将收入从2020年1月1日拆分为2020年7月31日),则无法应用。此外,结果也不是我所期望的,因为单个利润是按列而不是按行显示的。
即使日期范围很大,有没有一种更好的方法可以使我得到如图2所示的预期结果?
我当前的解决方案:
declare @t1 varchar(10)
declare @t2 varchar(10)
declare @t3 varchar(10)
set @t1 = '20200701'
set @t2 = '20200702'
set @t3 = '20200703'
select M_Date,Department,[T1_revenue] as [Profit_t1],([T2_revenue] - [T1_revenue]) as [Profit_t2],([T3_revenue] - [T2_revenue]) as [Profit_t3]
from(
select M_Date,Cumulated_Revenues as [T1_revenue]
from dmf_dbo.profitTable
WHERE M_Date = @t1
left join (
select M_Date,Cumulated_Revenues as [T2_revenue]
from dmf_dbo.profitTable
WHERE M_Date = @t2
) AS p_t2
on M_Date = p_t2.M_Date and Department = p_t2.Department
left join (
select M_Date,Cumulated_Revenues as [T3_revenue]
from dmf_dbo.profitTable
WHERE M_Date = @t3
) AS p_t3
on p_t2.M_Date = p_t3.M_Date and p_t2.Department = p_t3.Department
)
图片1.原始数据:
图片2.预期结果:
解决方法
我想我明白了。您只希望lag()
使用默认值:
select t.*,(cumulative_revenue -
lag(cumulative_revenue,1,0) over (partition by department order by m_date)
) as profit
from t;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。