怎么用sql实现库存先进先出

有两张表,表1(库存):入库明细:货号、批次、数量,表2(销售):货号、数量请问怎么用先进先出的算法,算出每个批次剩余库存数,用sql编写。例如:表1:0011100表2... 有两张表,表1(库存):入库明细:货号、批次、数量,表2(销售):货号、数量
请问怎么用先进先出的算法,算出每个批次剩余库存数,用sql编写。
例如:表1: 001 1 100 表2:001 400
001 2 200
001 3 300
结果应该是 001 1 0
001 2 0
001 3 200

请问这个用sql怎么编写
展开
 我来答
vinson_shen
2010-07-02 · TA获得超过2503个赞
知道小有建树答主
回答量:960
采纳率:100%
帮助的人:0
展开全部
create table 表1(货号 varchar(20),批次 int ,数量 int)

create table 表2(货号 varchar(20) ,数量 int)
/*------------------------------*/
insert into 表1
select '001', 1, 100 union all
select '001', 2, 200 union all
select '001', 3, 300

/*------------------------------*/
insert into 表2
select '001', 400
/*------------------------------*/
select * from 表1

select * from 表2
/*------------------------------*/
select t1.货号,t1.批次,
case when ((select isnull(sum(数量),0) from 表1 t3 where t3.货号=t1.货号 and t3.批次<t1.批次)-isnull(t2.new_数量,0))<0
then case when ((select sum(数量) from 表1 t4 where t4.货号=t1.货号 and t4.批次<=t1.批次)-isnull(t2.new_数量,0))<0 then 0
else ((select sum(数量) from 表1 t4 where t4.货号=t1.货号 and t4.批次<=t1.批次)-isnull(t2.new_数量,0))
end
else t1.数量
end as 批次剩余库存数
from 表1 t1
left join (select 货号,sum(数量) as new_数量 from 表2 group by 货号) t2
on t1.货号=t2.货号
/*------------------------------*/

PS:上面将null转换为0的函数为isnull,是SQL SERVER下的函数,你只要根据你的数据转换为对应函数就可以了,如oracle是nvl,mysql是ifnull等等.
壹寰(深圳)科技文化有限公司
2021-03-27 广告
不同公司提供的方案也不一样。以上回答如果还觉得不够详细,可以来咨询下壹寰(深圳)科技文化有限公司。91数据恢复是壹寰(深圳)科技文化有限公司旗下专业数据恢复品牌,91数据恢复专注于勒索病毒数据恢复、勒索病毒数据修复、数据库修复、数据库解密恢... 点击进入详情页
本回答由壹寰(深圳)科技文化有限公司提供
綦唱饶友琴
2019-06-22 · TA获得超过3792个赞
知道大有可为答主
回答量:3059
采纳率:24%
帮助的人:230万
展开全部
create
table
表1(货号
varchar(20),批次
int
,数量
int)
create
table
表2(货号
varchar(20)
,数量
int)
/*------------------------------*/
insert
into
表1
select
'001',
1,
100
union
all
select
'001',
2,
200
union
all
select
'001',
3,
300
/*------------------------------*/
insert
into
表2
select
'001',
400
/*------------------------------*/
select
*
from
表1
select
*
from
表2
/*------------------------------*/
select
t1.货号,t1.批次,
case
when
((select
isnull(sum(数量),0)
from
表1
t3
where
t3.货号=t1.货号
and
t3.批次<t1.批次)-isnull(t2.new_数量,0))<0
then
case
when
((select
sum(数量)
from
表1
t4
where
t4.货号=t1.货号
and
t4.批次<=t1.批次)-isnull(t2.new_数量,0))<0
then
0
else
((select
sum(数量)
from
表1
t4
where
t4.货号=t1.货号
and
t4.批次<=t1.批次)-isnull(t2.new_数量,0))
end
else
t1.数量
end
as
批次剩余库存数
from
表1
t1
left
join
(select
货号,sum(数量)
as
new_数量
from
表2
group
by
货号)
t2
on
t1.货号=t2.货号
/*------------------------------*/
PS:上面将null转换为0的函数为isnull,是SQL
SERVER下的函数,你只要根据你的数据转换为对应函数就可以了,如oracle是nvl,mysql是ifnull等等.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式