Поскольку вы используете SQL-Server-2008
, вы можете сделать это с помощью рекурсивного общего табличного выражения:
DECLARE @DataSource TABLE
(
[ColA] INT
,[Rownumb] INT
);
INSERT INTO @DataSource ([ColA], [Rownumb])
VALUES (1, 1), (1, 2), (1, 3), (2, 4), (1, 5), (1, 6), (1, 7), (2, 8), (2, 9), (2, 10), (2, 11), (2, 12), (2, 13), (2, 14), (3, 15), (2, 16), (2, 17), (2, 18), (3, 19), (3, 20), (3, 21), (3, 22), (3, 23), (3, 24);
WITH DataSourceRecursive AS
(
SELECT [ColA]
,[Rownumb]
FROM @DataSource
WHERE [Rownumb] = 1
UNION ALL
SELECT CASE WHEN DS1.[ColA] < DSR.[ColA] THEN DSR.[ColA] ELSE DS1.[ColA] END
,DS1.[Rownumb]
FROM @DataSource DS1
INNER JOIN DataSourceRecursive DSR
ON DS1.[Rownumb] = DSR.[RowNumb] + 1
)
SELECT *
FROM DataSourceRecursive;