题目:
drop table TBA,TBB
create table TBA(名称 varchar(10),数量 int,时间 varchar(10))
insert into TBA values('a',2,20071011)
insert into TBA values('a',1,20071012)
insert into TBA values('a',3,20071013)
insert into TBA values('b',2,20071011)
insert into TBA values('b',1,20071012)
insert into TBA values('b',3,20071013)
create table TBB(名称 varchar(10),数量 int)
insert into TBB values('a',3)
insert into TBB values('a',1)
insert into TBB values('b',6)
select * from TBA
select * from TBB
名称 数量 时间 名称 已分配量
a 2 20071011 a 2
a 1 20071012 a 1
a 2 20071011 a 1
b 2 20071011 b 2
b 1 20071012 b 1
b 3 20071013 b 3
要实现的结果
名称 数量 时间 名称 已分配量
a 2 20071011 a 2
a 1 20071012 a 1
a 2 20071011 a 1
b 2 20071011 b 2
b 1 20071012 b 1
b 3 20071013 b 3
/*经典句子:where A.名称 = TBA.名称 and A.时间< TBA.时间 :这样就可以根据匹配的名称A.名称 = TBA.名称 ,比如20071013经过A.时间< TBA.时间,那么sun():13号=12号+11号*/
select 时间,isnull((Select SUM(数量) from TBA A where A.名称 = TBA.名称 and A.时间< TBA.时间),0) from TBA
0
2
3
0
2
3
(Select 名称,sum(数量)as 数量 from TBB group by 名称 ) as TBB_new TBB作为新表存储仓库总的量可用来相减
4
6
:
法一:
Select TBA.*,TBB_new.名称,TBB_new.数量-isnull((Select SUM(数量) from TBA A where A.名称 = TBA.名称 and A.时间< TBA.时间),0) as 可分配的量,
isnull((Select SUM(数量) from TBA A where A.名称 = TBA.名称 and A.时间< TBA.时间),0) as FCQ,
TBB_new.数量 from TBA
left outer join (Select 名称,sum(数量)as 数量 from TBB group by 名称 ) as TBB_new on TBA.名称=TBB_new.名称
法二:
select TBA.*,TBB_new.名称, isnull((Select SUM(数量) from TBA A where A.名称 = TBA.名称 and A.时间< TBA.时间),0) as 初期数量,TBB_new.数量,
CASE WHEN (TBB_new.数量-isnull((Select SUM(数量) from TBA A where A.名称 = TBA.名称 and A.时间< TBA.时间),0))-TBA.数量>0 then TBA.数量
else (TBB_new.数量-isnull((Select SUM(数量) from TBA A where A.名称 = TBA.名称 and A.时间< TBA.时间),0)) end
from TBA left outer join (Select 名称,sum(数量)as 数量 from TBB group by 名称 ) as TBB_new on TBA.名称=TBB_new.名称
/*TBA AS A ,新查询结果TBB AS c,*/
Select TBB.名称,sum(TBB.数量)as 数量 from TBB group by TBB.名称
select SUM(数量) from TBA where TBA.名称=TBA.名称 and TBA.时间<TBA.时间