[英]How to calculate balance along opening balance in SQL
任何人都可以幫我寫一個 SQL 查詢來找到頂部余額的余額嗎?
所需的 output:
它目前不顯示“期初余額”,但我也想要它。
這是示例數據:
create database test
use test
CREATE TABLE [dbo].[tbl_Ledger]
(
[Ledg_ID] [int] Primary Key IDENTITY(1,1) NOT NULL,
[Ledg_p_ID] [int] NULL,
[Ledg_Pay_ID] [int] NULL,
[Ledg_FarmerID] [int] NOT NULL,
[Ledg_Date] [date] NOT NULL,
[Ledg_Desc] [varchar](255) NULL,
[Ledg_Debit] [money] NOT NULL,
[Ledg_Credit] [money] NOT NULL,
[Ledg_Remarks] [varchar](255) NULL
)
INSERT INTO [dbo].[tbl_Ledger] ([Ledg_p_ID], [Ledg_Pay_ID], [Ledg_FarmerID],[Ledg_Date],
[Ledg_Desc], [Ledg_Debit], [Ledg_Credit],[Ledg_Remarks])
VALUES (1, NULL, 2, '2021-05-06',
'Purchase', 500, 0.00, ''),
(NULL, 2, 2, '2021-05-07',
'Payment', 0.00, 300, ''),
(NULL, 3, 2, '2021-05-08',
'Payment', 0.00, 200, '')
這可能取決於您使用的數據庫供應商,但許多支持 OVER 子句。 看這里的解釋:
使用 OVER 您可以創建列的累積總和。 所以您的查詢將如下所示:
SELECT ID, p_ID, FarmerID, Datee, Description, Debit, Credit,
SUM (Debit - Credit) OVER (ORDER BY Datee) AS Balance
FROM tbl_Ledger
如果您想要每一行的“期初”余額,只需減去該行發生的情況:
SELECT l.*,
SUM(Debit - Credit) OVER (ORDER BY Datee) AS Balance
SUM(Debit - Credit) OVER (ORDER BY Datee) - (Debit - Credit) AS Opening_Balance
FROM tbl_Ledger l
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.