Предполагая, что SQL Server, это возможно при разумном использовании таблицы подсчета (в этом примере используется sys.all_columns
, размер которой является верхним пределом числа строк, которые могут быть сгенерированы) и вычислении частичных сумм для диапазоны индексов, что-то вроде этого:
;with Ranges as (
select
col1,
(select coalesce(sum(t2.col2), 0)+1
from MyTable t2 where t2.col1<t1.col1) as indexStart,
(select coalesce(sum(t2.col2), 0)
from MyTable t2 where t2.col1<=t1.col1) as indexEnd
from
MyTable t1
)
,TallyTable as (
select
row_number() over (order by c.object_id, c.column_id) as number
from
sys.all_columns c
)
select
r.col1
from
Ranges R, TallyTable T
where
T.number between r.indexStart and r.indexEnd
Хотя, как указано в комментариях к ОП, это не рекомендуется, и вполне возможно, что есть лучшее решение вашей бизнес-проблемы.