select * into #tmp
from TdailyJobcreate table #Result(
BatchID int,OutJobID int,InJobID int,Number int)while exists (select * from #tmp a where JobType='in' and Number>0 and exists ((select * from #tmp where BatchID=a.BatchID and JobType='out' and Number>0)) )
begininsert #result
select a.BatchID,a.dJID,b.DJID,case when a.Number>b.Number then b.Number else a.Number end 
from (
select * from #tmp a
where JobType='in' and number>0
and not exists (select * from #tmp where BatchID=a.BatchID and JobType='in' and number>0 and djid<a.djid)
) as a,(
select * into #tmpout from #tmp a
where JobType='out' and number>0
and not exists (select * from #tmp where BatchID=a.BatchID and JobType='out' and number>0 and djid<a.djid)
) as b
where a.BatchID=b.BatchIDupdate c
set number=c.number-case when a.Number>b.Number then b.Number else a.Number end 
from (
select * from #tmp a
where JobType='in' and number>0
and not exists (select * from #tmp where BatchID=a.BatchID and JobType='in' and number>0 and djid<a.djid)
) as a,(
select * into #tmpout from #tmp a
where JobType='out' and number>0
and not exists (select * from #tmp where BatchID=a.BatchID and JobType='out' and number>0 and djid<a.djid)
) as b,#Tmp c
where a.BatchID=b.BatchID
and (a.djid=c.djid or b.djid=c.djid)endselect * from #result
drop table #tmp,#result
哈,哈哈,哈哈哈......