Cara termudah untuk melakukannya adalah dengan menggunakan agregat berjalan. Dalam contoh asli Anda, Anda memiliki dua tabel, dan jika ini masalahnya, cukup jalankan penjumlahan pada tabel itu seperti yang saya lakukan di subselect dan simpan nilai itu dalam variabel yang saya buat @Sum.
CTE menghitung berapa nilainya saat ditambahkan bersama untuk setiap catatan, dan kemudian ditambahkan ke total yang dihitung, dan kemudian menyimpan yang positif.
Saya yakin ini akan sesuai dengan kebutuhan Anda.
DECLARE @Sum INT;
SET @Sum = 800;
WITH RunningTotals
AS (
SELECT [SNo]
, [Amount]
, [Amount] + (
SELECT ISNULL(SUM([Amount]), 0)
FROM [Table1] t2
WHERE t2.[SNo] < t.SNo
) [sums]
FROM [Table1] t
),
option_sums
AS (
SELECT ROW_NUMBER() OVER ( ORDER BY [SNo] ) [SNo]
, CASE WHEN ( [Sums] - @Sum ) > 0 THEN [Sums] - @Sum
ELSE [Amount]
END AS [Amount]
, sums
, [Amount] [OriginalAmount]
, [OriginalID] = [SNo]
FROM [RunningTotals] rt
WHERE ( [Sums] - @Sum ) > 0
)
SELECT [SNo]
, CASE [SNo]
WHEN 1 THEN [Amount]
ELSE [OriginalAmount]
END AS [Amount]
, [OriginalID]
FROM option_sums
SNo Amount OriginalID
--- ------ ----------
1 200 3
2 100 4
3 100 5
4 500 6
5 400 7
6 100 8
7 200 9