我已经把这个放在了我的舒适程度之外:我有一张表,其中包含Start_Date,End_Date和一周中的一天,其中的操作发生在开始和结束日期之间。我想创建一个包含ID,操作日期的表格,并加入操作DOW。下面,2014年11月24日和2014年12月17日之间的每个星期一(第1天)创建一条新线,继续通过表格。我不确定这是否需要某种光标,或者可以使用CASE WHEN类型的模式来完成。
TBL_OP_DATA
ID START_DATE END_DATE OPERATING_DOW
1 11/24/2014 12/17/2014 1
2 12/20/2014 1/7/2015 4
3 11/24/2014 12/17/2014 1
4 12/20/2014 1/7/2015 3
TBL_DAYS
PKDate calendar_day_in_week
11/24/2014 1
11/25/2014 2
11/26/2014 3
11/27/2014 4
11/28/2014 5
11/29/2014 6
11/30/2014 7
结果:
TBL_OP_BYDAY
ID OPERATING_DATE OPERATING_DOW
1 11/24/2014 1
1 12/1/2014 1
1 12/8/2014 1
1 12/15/2014 1
2 12/25/2014 4
2 1/1/2015 4
3 ......
答案 0 :(得分:2)
这是一个简单的JOIN条件,不需要光标:
SELECT
od.ID,
d.PKDate AS OPERATING_DATE,
od.OPERATING_DOW
FROM
TBL_DAYS d
INNER JOIN
TBL_OP_DATA od ON
d.PKDate >= od.START_DATE AND
d.PKDate <= od.END_DATE AND
d.CALENDAR_DAY_IN_WEEK = od.OPERATING_DOW
答案 1 :(得分:0)
这是最简单的方法。假设填充了TBL_Days:
insert into TBL_OP_BYDAY (Id, operating_date, operating_dow)
select od.Id, d.PKDate, od.operating_dow
from tbl_op_date od
inner join tbl_days d on d.PKDate >= od.start_date
and d.PKDate < od.end_date
and d.calendar_day_in_week = od.operating_dow
......应该做你想做的事。