【发布时间】:2011-12-01 05:53:34
【问题描述】:
我有一个列出月份总计(目标)的表格
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”的天数/当月的总天数,获取包含该天平均值的日期列表。
所以如果我在 201005 年说 20 个工作日,那么我每个工作日平均得到 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 ????
【问题讨论】:
标签: sql group-by common-table-expression