22,209
社区成员
发帖
与我相关
我的任务
分享
DECLARE @num INT =2 --第几次循环
SELECT *
FROM ( SELECT * ,
ROW_NUMBER() OVER ( ORDER BY CONVERT(INT, REPLACE(PCode,
'P', '')) ) rn
FROM TP1
) t
WHERE rn = @num
UNION ALL
SELECT *
FROM ( SELECT * ,
ROW_NUMBER() OVER ( ORDER BY CONVERT(INT, REPLACE(PCode,
'P', '')) ) rn
FROM TP1
) t
WHERE rn BETWEEN CASE WHEN @num > 6 THEN 0
ELSE 6
END
AND CASE WHEN @num > 6 THEN 6
ELSE 12
END;
declare @i int --循环次数
declare @m int
set @i=28
set @m=1
while @m<=@i
begin
if @m%12<=6 and @m%12<>0
begin
insert into #TP2
select @m,GroupCode,PCode,GETDATE() from #TP1 where CAST(REPLACE(PCode,'P','') AS INT)=@m%12
union all
select @m,GroupCode,PCode,GETDATE() from #TP1 where CAST(REPLACE(PCode,'P','') AS INT)>6
end
if @m%12>6 or @m%12=0
begin
insert into #TP2
select @m,GroupCode,PCode,GETDATE() from #TP1 where CAST(REPLACE(PCode,'P','') AS INT)=@m%12 or (@m%12=0 and CAST(REPLACE(PCode,'P','') AS INT)=12)
union all
select @m,GroupCode,PCode,GETDATE() from #TP1 where CAST(REPLACE(PCode,'P','') AS INT)<=6
end
set @m=@m+1
end