2013-03-26 70 views
2

我有以下蒙太奇格式的公司的預算數據。 SqlFiddle link here將每月數據分解爲每日數據

Dept# YearMonth Budget($) 
-------------------------- 
001 201301  100 
001 201302  110 
001 201303  105 
..  .....  ... 
002 201301  200 
... .....  ... 

我需要打破這一成日常記錄,這應該是這樣的:

Dept# Date  Budget($) 
-------------------------- 
001 20130101  xxx 
001 20130102  xxx 
001 20130103  xxx 
..  .....  ... 

我需要從源表中的每個記錄生成每日記錄。我不想假定每個月都有30天。我如何確定每個月的實際天數並按上面顯示的格式分解?

我很欣賞任何形式的幫助。謝謝!

回答

4

嘗試:

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 

(有整數到浮點預算的隱式轉換,否則每天的房費將被四捨五入爲最接近的美元 - 如果預算數據類型是這不會是必要的已經持有類似numeric(10,2)。)

(SQLFiddle here

+0

它工作得很好。非常感謝你! – Thracian 2013-03-26 14:39:12

+0

很高興能幫到你。 – 2013-03-26 14:39:31

+0

非常棒,爲我完美工作,將每月數據分成幾天。 – Paul 2016-11-17 11:18:42

相關問題