有两个表:
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最后一列是根据开支收入自动计算出来的。

解决方案 »

  1.   

    tb1全是开支的,
    tb2全是收入的,是分开存储的
      

  2.   

    把两个表拼成一个很好做,只要用union all就行了,但是我最主要的是想实现最后那一列的计算
      

  3.   

    select 日期,开支类型,金额 as 开支,0 as 收入 from tb1
    union all
    select 日期,收入类型,0 as 开支,金额 as 收入 from tb2这样就可以拼成一张表,但是最后那一列如何计算
    本行余额=上一行的期初-本行开支+本行的收入,
    用SQL语句如何实现。
      

  4.   


    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
      

  5.   

    cbgn说的就可以,只要再加上with tb 里面在稍加修改就是你想要的结果with上面同cbgnwith tb as
    (
    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
      

  6.   


    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
    根据各位前辈的指点 改造的  应该能实现你的数据信息  如有不妥之处请指正
      

  7.   

    select * into #tab from (
    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
    现在还差最后一栏的金额统计  暂时没有找到合适的方法