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等等.
要说它的原理就要先从它的结构及其作用谈起了:盘片被划分成一系列同心环,圆心是盘片中心,每个同心环称为一个磁道,所有半径相同的磁道组成一个柱面。磁道被沿半径线划分成一个个小的段,每个段称为一个扇区,每个扇区是磁盘的最小存储单元。为了简单起见,我们下面假设磁盘只有一个盘片和一个磁头。当磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。
为了读取这个扇区的数据,需要将磁头放到这个扇区上方,为了实现这一点,磁头需要移动对准相应磁道,这个过程称为寻道,所耗费时间称为寻道时间,然后磁盘旋转将目标扇区旋转到磁头下,这个过程耗费的时间称为旋转时间。
即一次磁盘的读写 *** 作完成过程由三个动作组成:
寻道(时间):磁头移动定位到指定磁道。
旋转延迟(时间):等待指定扇区从磁头下旋转经过。
数据传输(时间):数据在磁盘与内存之间的实际传输
经过这三个动作就可以完成储存照片这个过程了
希望我的回答对您有用,谢谢ヽ(^0^)ノ
create view kucunas
select 商品编号, sum(case when 是否有效=1 and *** 作类型=0 then 商品调动数量 when 是否有效=1 and *** 作类型=1 then -商品调动数量 else 0 end) as 数量,仓位 from table
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)