有两个表:
tb1(日期,开支类型,金额)
日期 开支类型 金额
2010-08-01 车费报销 2000
2010-08-03 管理费用 400
2010-08-06 招待费用 1500
tb2(日期,收入类型,金额)
日期 开支类型 金额
2010-08-02 销售收入 5000
2010-08-04 还款 200帐户2010-08-01之前余额为10000,如何用SQL语句实现一资金流水,结果如下
日期 类型 开支 收入 余额
-------------期初余额-------------------------10000
2010-08-01---车费报销-----2000----------------8000
2010-08-02---销售收入--------------5000-------13000
2010-08-03---管理费用-----400-----------------12600
2010-08-04---还款------------------200--------12800
2010-08-06---招待费用-----1500----------------11300
-------------期末余额-------------------------11300最后一列是根据开支收入自动计算出来的。
tb1(日期,开支类型,金额)
日期 开支类型 金额
2010-08-01 车费报销 2000
2010-08-03 管理费用 400
2010-08-06 招待费用 1500
tb2(日期,收入类型,金额)
日期 开支类型 金额
2010-08-02 销售收入 5000
2010-08-04 还款 200帐户2010-08-01之前余额为10000,如何用SQL语句实现一资金流水,结果如下
日期 类型 开支 收入 余额
-------------期初余额-------------------------10000
2010-08-01---车费报销-----2000----------------8000
2010-08-02---销售收入--------------5000-------13000
2010-08-03---管理费用-----400-----------------12600
2010-08-04---还款------------------200--------12800
2010-08-06---招待费用-----1500----------------11300
-------------期末余额-------------------------11300最后一列是根据开支收入自动计算出来的。
tb2全是收入的,是分开存储的
union all
select 日期,收入类型,0 as 开支,金额 as 收入 from tb2这样就可以拼成一张表,但是最后那一列如何计算
本行余额=上一行的期初-本行开支+本行的收入,
用SQL语句如何实现。
create table tb1 (日期 datetime,开支类型 varchar(20),金额 float)
insert tb1
select '2010-08-01','车费报销',2000 union all
select '2010-08-03','管理费用',400 union all
select '2010-08-06','招待费用',1500create table tb2 (日期 datetime,收入类型 varchar(20),金额 float)
insert tb2
select '2010-08-02','销售收入',5000 union all
select '2010-08-04','还款',200select * into #tab from (
select 0 as id,null 日期,'期初余额' 类型,10000 金额
union
select row_number()over (order by 日期),* from
(
select 日期 ,开支类型 ,金额*-1 金额 from tb1
union
select 日期 ,收入类型 ,金额 from tb2
)tb
)tb3with tb as
(
select id,日期,类型,金额 from #tab where id =0
union all
select #tab.id,#tab.日期,#tab.类型,#tab.金额+tb.金额 from #tab join tb on #tab.id=tb.id+1
)select 日期,类型,金额 from tb
drop table #tab
(
select *,金额 as 计算 from #tab where id =0
union all
select #tab.id,#tab.日期,#tab.类型,#tab.金额+tb.金额,#tab.金额 from #tab join tb on #tab.id=tb.id+1
)select * from tb
select * into #tab from (
select 0 as id,'-------------------' cdate,'期初余额' tepy,10000 countMoney
union
select row_number()over (order by cdate),* from (
SELECT [CreateDate] as cdate ,[OutType] as tepy ,convert(int,[OutCount])*-1 as countMoney FROM [OutMoney]
union all
SELECT [InDate] as cdate,[Intype] as tepy,convert(int,[InNumber]) as countMoney FROM [InMoney]
) tab
) tab1
select * from #tab
union
select (select MAX(ID) from #tab)+1 as id,'-------------------' CreateDate,'期末余额' OutType,(select SUM(countMoney) from #tab) OutCount
drop table #tab
根据各位前辈的指点 改造的 应该能实现你的数据信息 如有不妥之处请指正
select 0 as id,'-------------------' 日期,'期初余额' 类型,0 收入,0 支出 ,10000 金额
union
select row_number()over (order by 日期),* from (
SELECT [CreateDate] as 日期 ,[OutType] as 类型 ,0 as 收入,convert(int,[OutCount]) as 支出,convert(int,[OutCount])*-1 金额 FROM [OutMoney]
union all
SELECT [InDate] as 日期,[Intype] as 类型,convert(int,[InNumber]) as 收入,0 as 支出,convert(int,[InNumber]) as 金额 FROM [InMoney]
) tab
) tab1
select ID,日期,类型,收入,支出,金额 from #tab
union
select (select MAX(ID) from #tab)+1 as id,'-------------------' 日期,'期末余额' 类型,0 收入,0 支出 ,(select SUM(金额) from #tab) 金额 drop table #tab
现在还差最后一栏的金额统计 暂时没有找到合适的方法