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)
MODIFICA:
A pensarci bene, l'uso di una sottoquery in select (risposta di ala Quassnoi) potrebbe essere più efficiente. Proverò diverse versioni e guarderò i piani di esecuzione per vedere quale funzionerebbe meglio in base alle dimensioni del set di dati che hai...
EDIT2:
Vedo ancora questo raccogliere voti, anche se è improbabile che molte persone utilizzino ancora SQL Server 2005.
Se hai accesso a funzioni in finestra come LEAD()
, quindi usa quello invece...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable