This:-
select s.unit, dv.cost_2d+((s.quantity-dv.quantity_2d)*dv.cost) as valuation
from (
select
d.*,
isnull((
select sum(csq.quantity)
from #delivery csq
where csq.unit=d.unit
and csq.arrived>d.arrived
),0) as quantity_2d,
isnull((
select sum(csq.quantity*csq.cost)
from #delivery csq
where csq.unit=d.unit
and csq.arrived>d.arrived
),0) as cost_2d
from #delivery d
) as dv
join #stock s on s.unit=dv.unit
where dv.quantity+dv.quantity_2d>=s.quantity
and dv.quantity_2d<s.quantity
产生:
unit valuation
abc 255.00
如果源自:-
create table #stock (
unit varchar(10),
quantity int
)
create table #delivery (
unit varchar(10),
arrived date,
quantity int,
cost money
)
insert into #stock values ('abc',50)
insert into #delivery values ('abc','2013-11-01',100,3)
insert into #delivery values ('abc','2013-11-04',15,5)
insert into #delivery values ('abc','2013-11-05',25,6)
-----------更新-----------------------------------
这里有另一个版本,可能会更快地运行 - 取决于您的数据集/架构:
select dv.unit, dv.cost_2d+((dv.instock-dv.quantity_2d)*dv.cost) as valuation
from (
select
d.*,
isnull((
select sum(csq.quantity)
from #delivery csq
where csq.unit=d.unit
and csq.arrived>d.arrived
),0) as quantity_2d,
isnull((
select sum(csq.quantity*csq.cost)
from #delivery csq
where csq.unit=d.unit
and csq.arrived>d.arrived
),0) as cost_2d,
s.quantity as instock
from #delivery d
join #stock s on s.unit=d.unit
and s.quantity between isnull((
select sum(csq.quantity)
from #delivery csq
where csq.unit=d.unit
and csq.arrived>d.arrived
),0) and isnull((
select sum(csq.quantity)
from #delivery csq
where csq.unit=d.unit
and csq.arrived>d.arrived
),0) + d.quantity
) as dv