【问题标题】:CTE loop in loop [duplicate]循环中的CTE循环[重复]
【发布时间】:2013-04-09 10:05:18
【问题描述】:

情况:我有 2 张桌子。一个有 2 个字段 StartDate 和 EndDate。一张表,其中只有一个字段日期。因此,当您在开始日期和结束日期之间有 3 天时。他必须在新表中插入 3 行。

我有下一个代码,它在可用性表中插入了完美的行。

with View_Solidnet_Training as
(
select  cast('2013-04-09' as datetime) DateValue
union all
select DateValue + 1
from View_Solidnet_Training
where DateValue + 1 <= cast('2013-04-11' as datetime)
)
insert into OBJ_Availability  
select 34, DateValue, 'AM', 2, 'Test' from View_Solidnet_Training;

但是现在,在他将行插入新表格后,他停下了。但是在循环之后,他必须在视图中的下一行的新值中再次更改 Start 和 EndDate:View_Solidnet_Training。

那么是否有可能的解决方案,或者我应该创建一个新循环来检查视图的 ID 是否不为零?

【问题讨论】:

    标签: sql sql-server loops common-table-expression


    【解决方案1】:

    据我了解您的问题,我认为您应该从将日期放入列表开始,然后再插入。

    示例:

    create table Dates
    (
    startdate datetime,
    endDate datetime
    )
    
    insert dates
    SELECT '2013-04-06','2013-04-08'
    
    SELECT * from Dates
    
    Declare @date int
    Declare  @tbl table 
    (
    date_ datetime
    )
    
    SELECT @date = datediff(day,startDate-1,EndDate) from Dates
    SELECT @date
    
    while(@date != 0 )
    Begin 
    
    insert into @tbl
    SELECT dateadd(day,@date,StartDate-1) from dates
    
    set @date = @date -1
    
    END
    
    /*
    --TO-DO
    --Update StartDate and EndDate values in table Dates
    -- insert YourTable 
    -- select date_ from @tbl
    */
    SELECT * from @tbl
    order by date_
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-12
      • 2020-10-18
      • 2021-11-04
      • 2018-08-22
      • 2014-03-23
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      相关资源
      最近更新 更多