
例如上图中的数据,现要求每一条的余额数据是下面减到上面后的余额如:
明细项 收入 支出 余额 支出占总支出比
test 0.00 140.00 -140.00 63.63%
test 1000.00 60.00 800.00 27.27%
邮费 0.00 20.00 780.00 9.09%
这样呈现。
------解决方案--------------------
with tb(num,明细项,收入,支出,余额,出占总支出比)as(
select 1,'test',0.00,140.00,0,'63.63%' union
select 2,'test',1000.00,60.00,0,'27.27%' union
select 3,'邮费',0.00,20.00,0,'9.09%')
select 明细项,收入,支出,(select SUM(收入+支出*-1)
from tb where a.num>=num),出占总支出比
from tb a
------解决方案--------------------
给你的每一条记录加个编号,然后使用自己a left join 自己b,条件为a编号 >= b编号 ,sum(b.余额)就是你需要的数据
------解决方案--------------------
如果记录数不多,可以用我之前常用的方法,就是将查询的结果排好序,增加一个自增长列,保存到临时表中,再用1楼的方法得出结果。
------解决方案--------------------
经常查询 就加一个新表 在旧表里面加个插入 修改触发器 把数据处理后保存到新表里面
------解决方案--------------------
--sql2012
--数据
明细项 收入 支出 余额 支出占总支出比
test 0.00 140.00 -140.00 63.63%
test 1000.00 60.00 800.00 27.27%
邮费 0.00 20.00 780.00 9.09%
--创建表#a,并输入明细项,收入,指出三列
--余额,占比两列视为报表
drop table #a
create table #a
(
CostName varchar(20),
GetMoney decimal(9,2),
CostMoney decimal(9,2)
)
insert into #a (CostName,GetMoney,CostMoney)
values('test1',0.00,140.00),
('test2',1000.00,60.00),
('邮费',0.00,20.00)
select* from #a
--结果展示
/*
CostName GetMoney CostMoney
-------------------- --------------------------------------- ---------------------------------------
test1 0.00 140.00
test1 1000.00 60.00
邮费 0.00 20.00
(3 行受影响)
*/
--实现余额
;with a as
(
select costname,getmoney,costmoney,getmoney - costmoney as cash,row_number() over( order by costname) as rn