Thr*_*ian 3 t-sql sql-server-2008
我有一家公司的预算数据,采用以下每月格式。SqlFiddle 链接在这里。
Dept# YearMonth Budget($)
--------------------------
001 201301 100
001 201302 110
001 201303 105
.. ..... ...
002 201301 200
... ..... ...
Run Code Online (Sandbox Code Playgroud)
我需要将其分解为每日记录,如下所示:
Dept# Date Budget($)
--------------------------
001 20130101 xxx
001 20130102 xxx
001 20130103 xxx
.. ..... ...
Run Code Online (Sandbox Code Playgroud)
我需要从源表中的每条记录生成每日记录。我不想假设每个月有 30 天。如何确定每个月的实际天数并将其按上面所示的格式分解?
我很感激任何形式的帮助。谢谢!
小智 5
尝试:
with cte as
(select [dept#], [YearMonth], convert(datetime,[YearMonth]+'01',112) [Date], [Budget($)]
from budget
union all
select [dept#], [YearMonth], dateadd(d, 1, [Date]) [Date], [Budget($)]
from cte
where datediff(m,[Date],dateadd(d, 1, [Date]))=0
)
select [dept#], [Date],
1.0*[Budget($)] / count(*) over (partition by [dept#], [YearMonth]) [DailyBudget($)]
from cte
order by 1,2
Run Code Online (Sandbox Code Playgroud)
(预算中存在从整数到浮点的隐式转换,否则每日费率将四舍五入到最接近的美元 - 如果预算数据类型已经保存为类似 的数据类型,则不需要这样做numeric(10,2)。)
(这里是SQLFiddle )