日期:2014-05-17  浏览次数:20422 次

SQL 查询时游标使用
我现在有如下表内容:
月份 科目代码 客 户 本月借方 本月贷方
本位币(RMB) 本位币(RMB)
1 102001 工行(RMB)  340.00   350.00 
1 102002 工行(USD)  430.00   400.00 
1 102003 工行(HKD)  200.00   -   
2 102001 工行(RMB)  1,000.00   320.00 
2 102002 工行(USD)  450.00   900.00 
2 102003 工行(HKD)  -     780.00 
3 102001 工行(RMB)  -     1,220.00 
3 102002 工行(USD)  340.00   340.00 
3 102003 工行(HKD)  432.00   230.00 

我现在想查询出来的结果显示为:
月份 科目代码 客 户 上月余额 本月借方 本月贷方 本月余额
本位币(RMB) 本位币(RMB) 本位币(RMB) 本位币(RMB)
1 102001 工行(RMB)  1,000.00   340.00   350.00   990.00 
1 102002 工行(USD)  1,200.00   430.00   400.00   1,230.00 
1 102003 工行(HKD)  900.00   200.00   -     1,100.00 
1 合计  3,100.00   970.00   750.00   3,320.00 
2 102001 工行(RMB)  990.00   1,000.00   320.00   1,670.00 
2 102002 工行(USD)  1,230.00   450.00   900.00   780.00 
2 102003 工行(HKD)  1,100.00   -     780.00   320.00 
2 合计  3,320.00   1,450.00   2,000.00   2,770.00 
3 102001 工行(RMB)  1,670.00   -     1,220.00   450.00 
3 102002 工行(USD)  780.00   340.00   340.00   780.00 
3 102003 工行(HKD)  320.00   432.00   230.00   522.00 
3 合计  2,770.00   772.00   1,790.00   1,752.00 

其中本月余额=上月余额+本月借方-本月贷方
上月余额 = 上一月对应科目本月余额
------解决方案--------------------
首先要知道1月份的上月余额是怎么得来的,这个是计算后续数据的根基。

实现并不难,不需要游标,left join月份错位就可以了:
tb a left join tb b on a.月份=b.月份+1 and a.科目代码=b.科目代码

------解决方案--------------------
游标的效率有的时候很差,能不用尽量少用。