SQL:实现流水账的收入、支出、本期余额

有多组数据,分别是收入,支出,余额,它们的关系是:
本期余额=上次余额+收入-支出

/*
测试数据:
Create Table tbl([日期] smalldatetime,[收入] int ,[支出] int) 

Insert Into tbl
SELECT ‘2004-02-11‘, 60, 45
union SELECT ‘2004-10-01‘,60, 45
union SELECT ‘2004-10-02‘,40, 50
union SELECT ‘2004-10-15‘,50, 40
union SELECT ‘2004-10-16‘,10, null
union SELECT ‘2004-10-19‘,10, 0
union SELECT ‘2004-10-30‘,0, 10
*/ 
--select *,(select sum(收入-支出) from 表 where 你的表的主键<=tem.你的表的主键) 本次余额 from 表 tem 

select t.日期,t.收入,t.支出,(select sum(ISNULL(收入, 0))-sum(ISNULL(支出, 0)) from tbl where 日期 <= t.日期) as 本期余额
from tbl t order by 日期 desc
时间: 2024-10-25 07:48:37

SQL:实现流水账的收入、支出、本期余额的相关文章

sql 收入支出求盈亏

求项目ID为1000的盈亏 表名为:T 字段:ID    P_ID   AMOUNT   TYPE(1:收入 2:支出) select sum(case when TYPE=1 then AMOUNT when TYPE=2 then -AMOUNT end) from T where P_ID='1000'

PHP编程之收入支出明细表实现技术

账户金额明细表是统计用户所花的每笔金额和用户所在这个系统所赚的每笔金额,通俗的讲也就是收入和支出.但是很多编程技术人员在刚开始的时候,不知道如何去实现,往往或出现有收入记录却无支出记录,或者是相反的情况,所以对于这个问题,下面就来为大家分析讲解一下. 1.客户所在本系统消费的金额所产生的提成,写入本记录表中.php代码如下:if(I('pay_state')==2 && I('state')==3){$money=$info['money']/100;$uid=$info['uid'];$

[SQL]LeetCode181. 超过经理收入的员工 | Employees Earning More Than Their Managers

SQL架构 1 Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, ManagerId int) 2 Truncate table Employee 3 insert into Employee (Id, Name, Salary, ManagerId) values ('1', 'Joe', '70000', '3') 4 insert into Employee (Id, Name, Sala

Sql面试常考题(持续添加)

最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近感觉比较有意思的Sql查询题. 1.查询出子节点最多的NodeName,如下图的table, NodeName 子节点 节点1 1 节点2 2 节点3 1 节点3 1 节点3 1 节点4 2 节点4 3 1 declare @t table( id int ,NodeName varchar(50

集算器如何优化SQL计算(3)序运算

跨行引用 早期SQL不直接支持跨行引用,要生成序号后再JOIN,极其繁琐困难.引入窗口函数后的SQL能够较方便地引用其它行数据,但写法仍不简洁,有多个跨行引用项时代码会很长.而且如前所述,窗口函数在其它运算结果集基础上再实施,对窗口函数计算值的再引用就要写成子查询的形式,仍然繁琐. MySQL不支持窗口函数,但支持在SQL中使用变量,可以引用到前面的行,但无法引用到后面的行. 集算器提供了方便自然的跨行引用语法. 各产品月销售表结构为:产品.月份.销量:现要找出销量比上月多10%的记录. A 1

MicroERP数据初始化SQL脚本

--use MicroERP insert into tbUserGroup(GroupName,Remark) values('管理员组','具备所有权限')insert into tbUser(LoginName,LoginPassword,TrueName,IsDeleted,Remark,GroupID) values('admin','admin','管理员',0,'系统管理员',1)insert into tbDepartment(ID,TypeName,ParentID) valu

黑马视频-SQL之case

select tscoreId, tsid, tenglish, 评级=case when tenglish>=95 then '优秀' when tenglish>=90 then '良好' when tenglish>=80 then '中' when tenglish is null then '缺考' else '以后的比尔盖茨' end from TblScore then 后面的数据后类型必须一致 是等值判断 select tscoreId, tsid, tenglish,

echarts3.0 本期累计堆叠

@{ ViewBag.Title = "barlj"; } <h2>barlj</h2> <div id="main" style="width: 1000px;height:800px;"></div> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = echarts.in

QL Server 实用脚本

use MyFirstDB; -- 主要内容 -- SQL Server 实用脚本 -- 1.case语句 -- 2.子查询 -- 3.连接查询 -- 4.脚本变量与流程控制(选择与循环等) -- 5.事务 -- 6.存储过程 -- 7.触发器 --------------------------------- -- case 语句 -- 类似于C#中的三元表达式,好比n元表达式 -- 语法 -- 1)写在哪里? 在sql语句中需要值(标量)的地方 -- 2) -- if-else结构 /* c