برای تهیهی صورت حساب بانکی (گردش حساب) در 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