如何在SQL中沿期初余额计算余额

问题描述

有人可以帮我写一个 SQL 查询来找到余额,同时期初余额也在上面吗?

所需的输出:

1

目前没有显示“期初余额”,但我也想要。

这是示例数据:

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...