有个表cashdue  字段如下
number,supplycode,brief,amount1,amount2,amount3,amount4
001      001     办公费用  100   0        20      30
002      001    货款支出  200   50         20      30
003      001    货款支出  300   50         20      30
003      001    货款支出  400   0         20      30
这些信息为应付账款信息
现在要的结果集如下
number,supplycode,brief,amount1,amount2,amount3,amount4,balance
                期初余额   1500   0        0      0        1500
001      001     办公费用  100   0        20      30       1550
002      001    货款支出  200   50         20      30      1650   
003      001    货款支出  300   50         20      30      1850
003      001    货款支出  400   0         20      30       2150
balance的值是上一行的balance+本行(amount1-amount2-amount3-amount4)
sql我是写出来了,但是很没效率居然比游标还要慢,测试数据1W条,游标17秒,我那句10分钟
主要是先排序出行号,在以行号来算出此行之前有几行数据,然后在汇总,在连接。我不太懂优化,
我希望大家能以1W条数据来测试。

解决方案 »

  1.   

    SELECT number = '',
    supplycode = '',
    brief = '期初余额',
    amount1 = 1500,
    amount2 = 0,
    amount3 = 0,
    amount4 = 0,
    balance = 1500
    UNION ALL
    SELECT cashdue.number,
    cashdue.supplycode,
    cashdue.brief,
    cashdue.amount1,
    cashdue.amount2,
    cashdue.amount3,
    cashdue.amount4,
    balance = SUM(A.balance)
    FROM cashdue
    LEFT JOIN (SELECT number,
    supplycode,
    brief,
    amount1,
    amount2,
    amount3,
    amount4,
    balance = amount1-amount2-amount3-amount4
              FROM cashdue
       UNION ALL
       SELECT number = '',
    supplycode = '',
    brief = '期初余额',
    amount1 = 1500,
    amount2 = 0,
    amount3 = 0,
    amount4 = 0,
    balance = 1500) A
    ON CONVERT(int,cashdue.number) <= CONVERT(int,A.number)
    OR A.number = ''
    GROUP BY cashdue.number,
    cashdue.supplycode,
    cashdue.brief,
    cashdue.amount1,
    cashdue.amount2,
    cashdue.amount3,
    cashdue.amount4