注册 登录
编程论坛 SQL Server论坛

计算收发明细表的最后一列余额,好象要用游标,但我不清楚,请各位指教

ltr3507 发布于 2009-08-10 13:26, 688 次点击
1月份的科目余额是已知的,也就是90和80是已知的,如何把最后一列的余额算出来1005和1006的10条记录是在一个表里面,感觉是用游标做,但我没有使用过游标,盼各位高手予以指点。 如果这个表里只有一个科目我可以用循环做,但怎么能同时把两个科目的期未余额全算出来呢?
期间   科目     日期           收入      发出        余额   
1       1005    2009-1-1                             90
1       1005    2009-1-10      50                    
1       1005    2009-1-21                 10         
2       1005    2009-2-1       70                    
2       1005    2009-2-20                 20

1       1006    2009-1-1                             80
1       1006    2009-1-12      40                    
1       1006    2009-1-21                 10         
2       1006    2009-2-1       70                    
2       1006    2009-2-20                 20


要的结果

 期间   科目     日期           收入      发出        余额   
1       1005    2009-1-1                             90
1       1005    2009-1-10      50                    140
1       1005    2009-1-21                 10         130
2       1005    2009-2-1       70                    200
2       1005    2009-2-20                 20         180

1       1006    2009-1-1                             80
1       1006    2009-1-12       40                    120
1       1006    2009-1-21                 10         110
2       1006    2009-2-1       70                    180
2       1006    2009-2-20                 20         160
2 回复
#2
happynight2009-08-19 09:52
CREATE TABLE #ls1(期间 INT,科目 INT,日期 datetime,收入 DECIMAL(9,2),发出 DECIMAL(9,2),余额 DECIMAL(9,2))
 
INSERT INTO #ls1 VALUES(1,1005, '2009-1-1',NULL,NULL,90)
INSERT INTO #ls1 VALUES(1,1005, '2009-1-10',50,NULL,NULL)
INSERT INTO #ls1 VALUES(1,1005, '2009-1-21',NULL,10,NULL)
INSERT INTO #ls1 VALUES(2,1005, '2009-2-1',70,NULL,NULL)
INSERT INTO #ls1 VALUES(2,1005, '2009-2-20',NULL,20,NULL)
 
INSERT INTO #ls1 VALUES(1,1006, '2009-1-1',NULL,NULL,80)
INSERT INTO #ls1 VALUES(1,1006, '2009-1-12',40,NULL,NULL)
INSERT INTO #ls1 VALUES(1,1006, '2009-1-21',NULL,10,NULL)
INSERT INTO #ls1 VALUES(2,1006, '2009-2-1',70,NULL,NULL)
INSERT INTO #ls1 VALUES(2,1006, '2009-2-20',NULL,20,NULL)
 
            
SELECT 期间,科目,日期,收入,发出,
(SELECT ISNULL(SUM(收入),0) - ISNULL(SUM(发出),0) + ISNULL(SUM(余额),0) FROM #ls1 a WHERE a.日期<=#ls1.日期  AND a.科目=#ls1.科目)  
FROM #ls1 ORDER BY 科目,日期
---------------------------------------------
结果
1    1005    2009-01-01 00:00:00.000    NULL    NULL    90.00
1    1005    2009-01-10 00:00:00.000    50.00    NULL    140.00
1    1005    2009-01-21 00:00:00.000    NULL    10.00    130.00
2    1005    2009-02-01 00:00:00.000    70.00    NULL    200.00
2    1005    2009-02-20 00:00:00.000    NULL    20.00    180.00
1    1006    2009-01-01 00:00:00.000    NULL    NULL    80.00
1    1006    2009-01-12 00:00:00.000    40.00    NULL    120.00
1    1006    2009-01-21 00:00:00.000    NULL    10.00    110.00
2    1006    2009-02-01 00:00:00.000    70.00    NULL    180.00
2    1006    2009-02-20 00:00:00.000    NULL    20.00    160.00




#3
ltr35072009-08-21 13:38
谢谢楼上的大侠。
其实我用游标也做出来了,只是效率比较低,还是谢谢
1