2

次の月次形式の会社の予算データがあります。SqlFiddleリンクはこちら

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

1 に答える 1

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

(予算には整数から浮動小数点への暗黙の変換があります。そうでない場合、1日のレートは最も近いドルに丸められます。これは、予算データ型がすでに次のように保持されている場合は必要ありませんnumeric(10,2)。)

(SQLFiddleはこちら

于 2013-03-26T14:27:16.497 に答える