存储过程循环查询
日期 | 实际金额  |  理论金额
---------------------------
  29  |  80      |   40
  30  |  70      |    
  31  |          |   (70)
  01  |          |   (70)
  02  |          |   (70)
  03  |  120     |   (70)
  04  |  90      |   (120)
  05  |  85      |   (90)
select distinct  
年月日
,检品日
,点货日
,组CD
,部门CD
,供货商CD
,实际金额
,理论金额= case when 实际金额 <>0  
then (
select 实际金额   
from  dbo.viewStockPurchase_Data b  
where  b.点货日=(select max(c.点货日)  
from dbo.viewStockPurchase_Data c  
where b.点货日<c.点货日  
)
)  
end  
from  dbo.viewStockPurchase_Data as a
where 年月日>'2007/05/01'
group by .....
----------------------------
就是按日期
查询 前一天的实际金额的数据 来填充今天的理论金额
前一天没有就向前推 查询在前一天的数据...直到有数据为止!
(临时表,打印用)
望高手赐教!
------解决方案--------------------create table #t(日期 datetime,实际金额 int)
insert into #t
select '2007-10-29',80
union select '2007-10-30',70
union select '2007-10-31',null
union select '2007-11-01',null
union select '2007-11-02',null
union select '2007-11-03',120
union select '2007-11-04',90
union select '2007-11-05',85
select 日期,
	实际金额,
	理论金额 = (select 实际金额 from #t b where b.日期=(select max(日期) from #t where #t.日期<a.日期 and #t.实际金额>0))
from #t a
/*
日期                                                     实际金额        理论金额       
------------------------------------------------------ ----------- -----------  
2007-10-29 00:00:00.000                                80          NULL
2007-10-30 00:00:00.000                                70          80
2007-10-31 00:00:00.000                                NULL        70
2007-11-01 00:00:00.000                                NULL        70
2007-11-02 00:00:00.000                                NULL        70
2007-11-03 00:00:00.000                                120         70
2007-11-04 00:00:00.000                                90          120
2007-11-05 00:00:00.000                                85          90
(所影响的行数为 8 行)
*/