SELECT
[current].rowInt,
[current].Value,
ISNULL([next].Value, 0) - [current].Value
FROM
sourceTable AS [current]
LEFT JOIN
sourceTable AS [next]
ON [next].rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > [current].rowInt)
EDITAR:
Pensando nisso, usar uma subconsulta no select (resposta de ala Quassnoi) pode ser mais eficiente. Eu testaria versões diferentes e examinaria os planos de execução para ver qual teria o melhor desempenho no tamanho do conjunto de dados que você tem ...
EDIT2:
Ainda vejo isso ganhando votos, embora seja improvável que muitas pessoas ainda usem o SQL Server 2005.
Se você tiver acesso a funções com janela, como
LEAD()
, então use isso em vez disso ... SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable