库存分配 --

题目:

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.时间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值