Sql 迄今为止每月预算的统一分配

Sql 迄今为止每月预算的统一分配,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

我有每月的预算需要分发到每天

数据源

月 预算 简 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)
     )
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