Вы можете увидеть причину в первой строке общего табличного выражения:
select @MaxValue, (@MaxValue - @RowsPerGroup1)
Это вставит (200,106)
intto src
.Второй выбор затем отсчитывает от существующих строк.Чтобы адаптировать CTE, обменивайте минимумы с максимумами (в том числе для диапазонов), инвертируйте арифметику, обратные сравнения и любые другие связанные обмены:
select @MinValue, (@MinValue + @RowsPerGroup1) union all
select val+1, case
when val+1 < @MaxValue - @RowsPerGroup1
then val+1 + @RowsPerGroup1
else @MaxValue
end
from src
where val+1 <= @MaxValue
Этот конкретный оператор можно упростить по частям:
select @MinValue, (@MinValue + @RowsPerGroup - 1) union all
select val + 1, case
when val + @RowsPerGroup < @MaxValue
then val + @RowsPerGroup
else @MaxValue
end
from src
where val < @MaxValue