你原表里就有余额这个列啊
你不想显示原来表中的“余额”列,那就不要写*啊
SELECT id,日期,合计,退款金额,(合计-退款金额) AS 余额 FROM sf

解决方案 »

  1.   

    /* 测试数据
    WITH SF(id,日期,合计,退款金额,余额) AS (
        SELECT 1,'2009-11-11',1200,80,0 UNION ALL
        SELECT 2,'2009-11-11',0,100,0 UNION ALL
        SELECT 3,'2010-03-03',233400,0,0 UNION ALL
        SELECT 4,'2010-03-03',0,15400,0 UNION ALL
        SELECT 5,'2012-02-13',100,0,0 UNION ALL
        SELECT 6,'2014-03-15',1600,80,0 UNION ALL
        SELECT 7,'2014-08-08',8600,100,0 UNION ALL
        SELECT 8,'2014-08-08',0,430,0 UNION ALL
        SELECT 9,'2015-02-10',1250,220,0 
    )*/
            SELECT t.日期,
                   t.合计 收入,
                   t0.余额+t.合计 AS 合计,
                   t.退款金额,
                   t0.余额+t.合计-t.退款金额 AS 余额
              FROM SF t
      CROSS APPLY (SELECT ISNULL(SUM(合计-退款金额),0) 余额
                     FROM SF
                    WHERE id < t.ID
                  ) t0
         ORDER BY t.id
    日期              收入        合计    退款金额        余额
    ---------- ----------- ----------- ----------- -----------
    2009-11-11        1200        1200          80        1120
    2009-11-11           0        1120         100        1020
    2010-03-03      233400      234420           0      234420
    2010-03-03           0      234420       15400      219020
    2012-02-13         100      219120           0      219120
    2014-03-15        1600      220720          80      220640
    2014-08-08        8600      229240         100      229140
    2014-08-08           0      229140         430      228710
    2015-02-10        1250      229960         220      229740
      

  2.   

    感谢,我就要这个效果。@Tiger_Zhao