У меня есть таблица, в которой перечислены итоги месяца (цели)
person total month
----------- --------------------- -----------
1001 114.00 201005
1001 120.00 201006
1001 120.00 201007
1001 120.00 201008
.
1002 114.00 201005
1002 222.00 201006
1002 333.00 201007
1002 111.00 201008
.
.
но месяц - целое число (!)
У меня также есть другая таблица со списком рабочих дней (календарь)
tran_date day_type
----------------------- ---------------------------------
1999-05-01 00:00:00.000 WEEKEND
1999-05-02 00:00:00.000 WEEKEND
1999-05-03 00:00:00.000 WORKING_DAY
1999-05-04 00:00:00.000 WORKING_DAY
1999-06-01 00:00:00.000 .....
.
.
.
Что я хочу сделать, так это получить список дат со средним значением для этого дня на основе количества дней в месяце, где day_type равен «WORKING_DAY» / всего за месяц.
поэтому, если бы у меня было, скажем, 20 рабочих дней в 201005 году, я бы получил в среднем 114/20 за каждый рабочий день, а в остальные дни было бы 0.
что-то вроде
person tran_date day_avg
------- ----------------------- ---------------------------------
1001 2010-05-01 00:00:00.000 0
1001 2010-05-02 00:00:00.000 0
1001 2010-05-03 00:00:00.000 114/2 (as there are two working days)
1001 2010-05-04 00:00:00.000 114/2 (as there are two working days)
.
.
.
Это должно быть сделано как CTE, так как это ограничение целевой системы (я могу сделать только один оператор), я могу начать с (Даты до
WITH
Dates AS
(
SELECT CAST('19990501' as datetime) TRAN_DATE
UNION ALL
SELECT TRAN_DATE + 1
FROM Dates
WHERE TRAN_DATE + 1 <= CAST('20120430' as datetime)
),
Targets as
(
select CAST(cast(month as nvarchar) + '01' as dateTime) mon_start,
DATEADD(MONTH, 1, CAST(cast(month as nvarchar) + '01' as dateTime)) mon_end,
total
from targets
)
select ????