برای تهیه‌ی صورت حساب بانکی (گردش حساب) در SQL روش‌های مختلفی وجود دارد که ما در این مطلب یکی از روش‌های آن را پیاده‌سازی می‌کنیم.

به عنوان یک مثال جدولی برای نگهداری تراکنش‌ها ایجاد می‌نماییم:

1CREATE TABLE [Transactions]
2([Row] integer, [Type] integer, [Amount] DECIMAL(18,0))
sql

سپس آن را با مقادیر زیر مقداردهی می‌کنیم:

 1INSERT INTO [Transactions] ([Row], [Type], [Amount])
 2VALUES (1, 1, 1000)
 3
 4INSERT INTO [Transactions] ([Row], [Type], [Amount])
 5VALUES (2, 1, 2000)
 6
 7INSERT INTO [Transactions] ([Row], [Type], [Amount])
 8VALUES (3, -1, 1000)
 9
10INSERT INTO [Transactions] ([Row], [Type], [Amount])
11VALUES (4, 1, 3000)
sql

سه متغیر به نام‌های SumCredit، SumDebit و Balance را به عنوان جمع بستانکار از قبل، جمع بدهکار از قبل و مانده از قبل تعریف می‌کنیم. در صورتی که همه تراکنش‌ها در یک جدول است و جدول دیگری برای تراکنش‌های قبلی نداریم مقدار این سه متغیر را می‌توان برابر صفر قرار داد یا آن‌ها را با صفر جایگزین نمود.

1DECLARE @SumCredit DECIMAL(18,0);
2SET @SumCredit = 8000;
3
4DECLARE @SumDebit DECIMAL(18,0);
5SET @SumDebit = 2000;
6
7DECLARE @Balance DECIMAL(18,0);
8SET @Balance = 5000;
sql

در آخر هم به منظور نمایش صورت حساب به روش زیر عمل می کنیم:

1SELECT
2	[Row] AS Row,
3	[Type] AS Type,
4	[Amount] AS Amount,
5	((SUM(([Type]*[Amount])*(-1)) OVER (ORDER BY [Row])) + @Balance) AS Balance,
6	((SUM(CASE WHEN [Type] = -1 THEN [Amount] ELSE 0 END) OVER (ORDER BY [Row])) + @SumCredit) AS Credit,
7	((SUM(CASE WHEN [Type] = 1 THEN [Amount] ELSE 0 END) OVER (ORDER BY [Row])) + @SumDebit) AS Debit
8FROM [Transactions]
sql