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)
EDIT:
Memikirkannya, menggunakan subquery di pilih (jawaban ala Quassnoi) mungkin lebih efisien. Saya akan mencoba versi yang berbeda, dan melihat rencana eksekusi untuk melihat mana yang berkinerja terbaik pada ukuran kumpulan data yang Anda miliki...
EDIT2:
Saya masih melihat ini mengumpulkan suara, meskipun tidak banyak orang yang masih menggunakan SQL Server 2005.
Jika Anda memiliki akses ke Fungsi Berjendela seperti LEAD()
, lalu gunakan itu sebagai gantinya...
SELECT
RowInt,
Value,
LEAD(Value, 1, 0) OVER (ORDER BY RowInt) - Value
FROM
sourceTable