我需要根据表A到表B中的一条记录插入多行。查询需要从表A中的开始和结束日期抓取每一天,并检查它是否是工作日。如果是非工作日(周末),则不会插入表B中。
情景如下:
Table A:
+ LID + Start_Date + End_Date + Working_Day + Total_Days
------------------------------------------------------------
| 101 | 1-Jan-18 | 5-Jan-2018 | Yes | 5 |
Table B (Expected Result):
+ LID + Start_Date + End_Date +
---------------------------------
| 101 | 1-Jan-18 | 1-Jan-2018 |
| 101 | 2-Jan-18 | 2-Jan-2018 |
| 101 | 3-Jan-18 | 3-Jan-2018 |
| 101 | 4-Jan-18 | 4-Jan-2018 |
| 101 | 5-Jan-18 | 5-Jan-2018 |
答案 0 :(得分:1)
如果我理解正确,您可以使用递归CTE扩展数据,然后过滤掉周末:
with cte as (
select ltd, start_date, end_date,
from a
union all
select ltd, date_add(day, 1, start_date), end_date
from cte
where start_date < end_date
)
select ltd, start_date, end_date
from cte
where datename(weekday, start_date) not in ('Saturday', 'Sunday');