我有一個日期表這樣一個使用CTE:如何在多個記錄
Exit_Date Date_ID
2017-05-31 1
2017-04-26 2
2017-01-02 3
2016-12-24 4
2016-11-27 5
我使用一個循環插入每個這些日期的成CTE來產生近15年來這些日期等這樣的:
declare @DI int = 1
declare @d date
while @DI <=5
begin
select @d = Exit_Date from Date_Table where Date_ID = @DI
declare @EDTable table (Exit_Date Date);
with
a as(
select dateadd(yy,-1,@d) d,0 i
union all
select dateadd(yy,-1,d),i+1 from a where i<14
),
b as(select d,datediff(dd,0,d)%7 dd from a)
insert into @EDTable select d from b;
set @DI = @DI + 1
end
的結果是正確的,我得到75行與我的日期。我想知道是否有辦法通過從Date_Table中的每個日期記錄替換變量@d
來擺脫WHILE
循環?
如果您的工作代碼已經產生了您想要的結果,但正在尋求改進,這可能更適合於Code Review而不是Stack Overflow。 –
@Damien_The_Unbeliever謝謝我不知道代碼審查的存在 – JulGreen
看看CROSS APPLY消除循環 –