存储过程循环查询
日期 | 实际金额 | 理论金额
---------------------------
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 行)
*/