问题描述
有人可以帮我写一个 SQL 查询来找到余额,同时期初余额也在上面吗?
所需的输出:
目前没有显示“期初余额”,但我也想要。
这是示例数据:
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,'2021-05-07','Payment',300,3,'2021-05-08',200,'')
解决方法
这可能取决于您使用的数据库供应商,但很多都支持 OVER 子句。 见说明here:
使用 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