在SQL中使用FIFO更新事务记录

在SQL中使用FIFO更新事务记录,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我有一份收货和发货申请。我在事务表中处理这两个进程。收货时手工给出BOE号,所以所有收货记录都有BOE号。但在发货时,我不会更新此BOE列。实际上,我需要知道这个项目来自哪个BOE(我想使用FIFO)标准。现在我的事务表有很多数据。但我想知道每一个英格兰银行有多少个项目来了,又有多少个项目出来了 我提出了这样的疑问 select F_lot_number, sum(INq) 'IN', sum(OUTs) 'OUT', sum(BOE) 'BOEcount' from (s

我有一份收货和发货申请。我在事务表中处理这两个进程。收货时手工给出BOE号,所以所有收货记录都有BOE号。但在发货时,我不会更新此BOE列。实际上,我需要知道这个项目来自哪个BOE(我想使用FIFO)标准。现在我的事务表有很多数据。但我想知道每一个英格兰银行有多少个项目来了,又有多少个项目出来了

我提出了这样的疑问

select 
    F_lot_number, sum(INq) 'IN', sum(OUTs) 'OUT', sum(BOE) 'BOEcount' 
from 
    (select 
         F_lot_number,
         case 
            when F_Stock_Type = 'IN' then sum(F_qty) 
         end as 'INq',
         case 
            when F_Stock_Type = 'out' and  F_IsBook = '2' then sum(F_qty)  
         end as 'OUTs',
         case 
            when F_Stock_Type = 'IN' 
               then count(distinct F_BillOf_entryNumber) 
         end as 'BOE'
     from 
         T_Tra_Transaction 
     group by 
         F_lot_number, F_Stock_Type, F_IsBook) d 
group by 
    F_lot_number
输出如下所示:

如果示例

select 
    F_QTY, F_lot_number, F_BillOf_entryNumber 
from 
    T_Tra_Transaction 
where 
    F_lot_number = '150723A151' 
    and F_Stock_Type = 'IN'

select 
    F_QTY, F_lot_number, F_BillOf_entryNumber 
from 
    T_Tra_Transaction 
where 
    F_lot_number = '150723A151' 
    and F_Stock_Type = 'out'
输出如下所示:

我需要用相应的BOE编号更新所有输出状态。我该怎么做?我需要根据这一点更新我所有的现有记录。如果有任何帮助,我非常感谢

在我的表中,还有
transdatetime
字段

我查过其他批号

select 
    F_QTY, F_lot_number, F_BillOf_entryNumber 
from 
    T_Tra_Transaction 
where 
    F_lot_number = '150919C131' 
    and F_Stock_Type = 'IN'

select 
    F_QTY, F_lot_number, F_BillOf_entryNumber 
from 
    T_Tra_Transaction 
where 
    F_lot_number = '150919C131' 
    and F_Stock_Type = 'out'
但我是这样出去的:

我假设每批货的销售数量都与购买数量相同。 因此,我们的想法就是正确地更新ins和OUT,并从相应的ins中更新OUT。没有测试

update tout
set F_BillOf_entryNumber = tin.F_BillOf_entryNumber 
from (
    select F_QTY, F_lot_number, F_BillOf_entryNumber 
    , rn = row_number() over (partition by F_QTY, F_lot_number order by transdatetime desc)
    from 
        T_Tra_Transaction 
    where 
        F_Stock_Type = 'out'
    ) tout
join (
    select 
        F_QTY, F_lot_number, F_BillOf_entryNumber
        , rn = row_number() over (partition by F_QTY, F_lot_number order by transdatetime desc)
    from 
        T_Tra_Transaction 
    where 
        F_Stock_Type = 'IN'
    ) tin 
    on tout.F_QTY = tin.F_QTY
       and tout.F_lot_number = tin.F_lot_number
       and tout.rn = tin.rn;
编辑

我在样本数据上进行了测试

create table T_Tra_Transaction(
F_QTY int, F_lot_number int , F_BillOf_entryNumber int,
     transdatetime int, F_Stock_Type varchar(3));
insert  T_Tra_Transaction (F_QTY, F_lot_number, F_BillOf_entryNumber,transdatetime,F_Stock_Type)
values
(10,1,101,200,'IN'),
(20,1,102,201,'IN'),
(20,1,null,200,'out');

在第一幅图像中,它显示批号、输入数量、输出数量、Boe编号countdear@marc_.您是否从问题中删除了我的输出图像?dear@Serg可能重复,我的条件不一样..我想更新我的所有现有记录,,,根据我的解释?请添加交易表架构。此表中是否有日期时间、时间戳或序列值?列名“transdatetime”无效。我是从您的注释“我也有transdatetime字段”中获取的。根据您的实际方案进行更正。我想用相应的BOE编号更新所有出货批号提供样本数据,以便我们看到问题。先生,我如何才能将我的数据提供给您,,,?