Для задач такого типа мне нравится использовать рекурсивный CTE .Заимствовал дополнительные тестовые случаи от @Luis Cazares.Также добавлены тестовые примеры для типа 15, о котором вы упоминали в комментариях.В приведенном ниже решении вы можете поменять местами значения X и Y, и он будет рассчитан соответственно.
CREATE TABLE #TestData
(
id INT
, type INT
, seconds int
);
INSERT INTO #TestData VALUES
(1, 10, 19)
, (2, 10, 12)
, (3, 10, 7)
, (4, 10, 5)
, (5, 10, 3)
, (6, 15, 54)
, (7, 15, 8);
DECLARE
@X INT = 5
, @Y INT = 9;
SET @Y = @Y - @X;
WITH CTE AS
(
SELECT id, CASE WHEN type = 10 THEN 0 ELSE type END AS type, seconds, seconds AS ov
FROM #TestData
UNION ALL
SELECT
id
, type + 1
, CASE
WHEN type = 0 THEN seconds - @X
WHEN type = 1 THEN seconds - @Y
WHEN type = 2 THEN seconds
END
, ov
FROM CTE
WHERE seconds > 0
)
SELECT
id
, type
, CASE
WHEN type = 1 AND seconds > 0 THEN @X
WHEN type = 2 AND seconds > 0 THEN @Y
WHEN type = 2 AND seconds < 0 THEN ov - @X
WHEN type = 3 AND seconds > 0 THEN seconds
ELSE ov
END
FROM CTE
WHERE type <> 0 AND CTE.seconds IS NOT NULL
ORDER BY id, type
DROP TABLE #TestData;