求货物分配的练习

预备数据:


--生成测试数据
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)


希望看见的查询结果:

/**
名称 数量 时间 名称 已分配量
a 2 20071011 a 2
a 1 20071012 a 1
a 3 20071013 a 1
b 2 20071011 b 2
b 1 20071012 b 1
b 3 20071013 b 3
*/



答案:

------------测试语句
SELECT 名称, SUM(数量) from TBA WHERE TBA.时间<20071013 AND TBA.名称='a' GROUP BY TBA.名称

-----------解答一

SELECT A.*,C.名称,C.总数,已分配量 =
CASE WHEN (C.总数-ISNULL(( SELECT SUM(D.数量)
FROM TBA AS D
WHERE D.时间<A.时间
AND D.名称=A.名称
GROUP BY D.名称),0))>=A.数量
THEN
A.数量
ELSE
(C.总数-ISNULL(( SELECT SUM(D.数量)
FROM TBA AS D
WHERE D.时间<A.时间
AND D.名称=A.名称
GROUP BY D.名称),0))
END
FROM TBA AS A
left JOIN
( SELECT B.名称 AS 名称,SUM(B.数量) AS 总数
FROM TBB B
GROUP BY B.名称) AS C
ON ( A.名称=C.名称)


-----------解答二

SELECT TBA.*,TBB.数量-ISNULL((
SELECT SUM(数量)
FROM TBA A
WHERE A.名称 = TBA.名称
AND A.时间< TBA.时间) ,0),
ISNULL(( SELECT SUM(数量)
FROM TBA A
WHERE A.名称 = TBA.名称
AND A.时间< TBA.时间) ,0)
as FCQ,TBB.数量
FROM TBA
LEFT OUTER JOIN
( SELECT 名称,SUM(数量) AS 数量
FROM TBB
GROUP BY 名称 ) AS TBB
ON TBA.名称=TBB.名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值