Sql 迄今为止每月预算的统一分配
我有每月的预算需要分发到每天 数据源 月 预算 简 31 二月 56Sql 迄今为止每月预算的统一分配,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有每月的预算需要分发到每天 数据源 月 预算 简 31 二月 56 假设月份实际上是第一天的日期,那么一个非常简单的方法使用递归CTE: with cte as ( select month as day, budget from t union all select dateadd(day, 1, day), budget from cte where day < eomonth(day) ) selec
假设月份实际上是第一天的日期,那么一个非常简单的方法使用递归CTE:
with cte as (
select month as day, budget
from t
union all
select dateadd(day, 1, day), budget
from cte
where day < eomonth(day)
)
select day, budget * 1.0 / day(eomonth(day))
from cte
order by day;
是一个数据小提琴。只是另一个使用特殊理货/数字表的选项 这假设源月份是字符串,所需年份是当前年份 示例或
是否存在预算无法平均分配到一个月内每天的情况?你想怎么处理这件事?请包括此类场景示例数据和预期结果谢谢!很高兴我学会了CTE技巧
Declare @YourTable Table ([Month] varchar(50),[Budget] money)
Insert Into @YourTable Values
('Jan',31)
,('Feb',56)
Select Date = DateFromParts(year(D),month(D),N)
,Budget = Budget / day(D)
From @YourTable A
Cross Apply ( values (EOMonth(try_convert(date,concat('01-',Month,'-',year(getdate())))))) B(D)
Join (Select Top 31 N=Row_Number() Over (Order By (Select Null)) From master..spt_values n1) C
on N<=day(D)
Date Budget
2021-01-01 1.00
2021-01-02 1.00
...
2021-01-30 1.00
2021-01-31 1.00
2021-02-01 2.00
...
2021-02-27 2.00
2021-02-28 2.00