SQL - 根据条件的一条记录插入多行

时间:2018-05-17 02:34:01

标签: sql sql-server database sql-insert bulkinsert

我需要根据表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 |

1 个答案:

答案 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');