Tally, , ID, . Tally , :
WITH Tally (n) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) a(n)
CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) b(n)
CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0)) c(n)
), Min_Max_CTE(min_id, max_id) AS
(
SELECT MIN(ID) AS min_id, MAX(ID) AS max_id
FROM mytable
)
SELECT ID, MAX(STRING) OVER (PARTITION BY grp) AS STRING
FROM (
SELECT t1.n AS ID, t3.STRING,
MAX(t3.ID) OVER (ORDER BY t1.n) AS grp
FROM Tally As t1
CROSS JOIN Min_Max_CTE AS t2
LEFT JOIN mytable AS t3 ON t3.ID = t1.n
WHERE t1.n BETWEEN t2.min_id AND t2.max_id) AS t
. SQL Server 2012 +.