当前位置: 代码迷 >> Sql Server >> 客户的一个奇葩要求,求相助
  详细解决方案

客户的一个奇葩要求,求相助

热度:21   发布时间:2016-04-24 10:41:51.0
客户的一个奇葩要求,求帮助。

例如上图中的数据,现要求每一条的余额数据是下面减到上面后的余额如:
明细项   收入  支出                             余额                          支出占总支出比
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
  相关解决方案