需要一点帮助。所以我在这里有这个日历表sqlfiddle.com/#!3/5d8a9有2个标志(M,W)表示月或周。我需要与具有每周日期字段的TBL2(下方)进行联接。所以我将在开始日期与Cal表的周开始时加入TBL2(带有W标志)但是如果weekstartdate在开始和结束日期之间,我需要返回带有'M'标志的startdate。它有意义吗?
TBL2:
prod_id weeknum wkstartdate postingDate qty
----------------------------------------------------------------
1043890 5 2015-01-25 2016-01-18 3
1043890 6 2015-02-01 2016-01-18 6
1043890 7 2015-02-08 2016-01-18 2
1043890 8 2015-02-15 2016-01-18 0
...
1043890 50 2015-12-06 2016-01-18 1
1043890 51 2015-12-13 2016-01-18 2
1043890 52 2015-12-20 2016-01-18 7
Desired Result:
==================
prod_id weeknum wkstartdate postingDate qty Period
----------------------------------------------------------------------------
1043890 5 2015-01-25 2016-01-18 3 2015-01-25
1043890 6 2015-02-01 2016-01-18 6 2015-01-25
1043890 7 2015-02-08 2016-01-18 2 2015-01-25
1043890 8 2015-02-15 2016-01-18 0 2015-01-25
1043890 10 2015-03-01 2016-01-18 0 2015-03-01
...
1043890 50 2015-12-06 2016-01-18 1 2015-11-22
1043890 51 2015-12-13 2016-01-18 2 2015-11-22
1043890 52 2015-12-20 2016-01-18 7 2015-11-22
如果有意义,我正在尝试检查weekstartdate是否介于一个日期范围(startdate-enddate)和M标志之间,然后启动startdate并在temp表中更新该记录或创建一个temp将新列添加到每条记录中的表。
感谢。
答案 0 :(得分:1)
我的理解是你试图在startstate上使用cal表连接tablestarttable上的table2,如果周开始日期在开始日期和结束日期之间,你想修改标志。 如果纠正,请尝试以下查询。
select t2.prod_id,t2.weeknum,c.startdate
,case when t2.wkstartdate between c.startdate and c.enddate
then 'M' else null end modifiedflag,
c.flag as originalflag
from cal c,table2 t2
where c.flag ='W' and t2.wkstartdate = c.startdate
and t2.wkstartdate between c.startdate and c.enddate;