在日期范围和连接之间创建新表

时间:2014-11-13 17:49:59

标签: sql tsql

我已经把这个放在了我的舒适程度之外:我有一张表,其中包含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 ......

2 个答案:

答案 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

......应该做你想做的事。