2017-01-22 4 views
0

У меня есть приложение для получения и доставки. Я обрабатываю эти 2 процесса в таблице транзакций. При получении элемента вручную указывая номер BOE, поэтому все получающие записи имеют номер BOE. Но при отправке товара я не обновляю этот столбец BOE. На самом деле мне нужно знать, что этот предмет пришел из того, с какого BOE (я хочу использовать FIFO). Теперь в моей таблице транзакций много данных. Но я хочу знать каждый BOE, сколько предметов пришло и сколько предметов.Обновление записи транзакции с FIFO в SQL

Я сделал запрос, как этот

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 

выход выглядит следующим образом:

enter image description here

если пример

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' 

Выход выглядит следующим образом:

enter image description here

Мне нужно обновить все статус с соответствующим номером 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' 

, но я получаю из положить так: enter image description here

+0

На первом изображении его показывает номер партии, ВО QTY, Выход Кол-во, Боэ подсчет числа – user3262364

+0

дорогой @ marc_s..did вы удалили мои статические изображения из вопроса? – user3262364

+0

Возможный дубликат [Как реализовать FIFO в sql] (http://stackoverflow.com/questions/25152990/how-to-implement-fifo-in-sql) – Serg

ответ

0

Я предполагаю, что каждый лот всегда продаются с той же Qty она была приобретена. Итак, идея - это всего лишь row_number() входы и выходы должным образом и обновление выходов из соответствующих входов. Не испытано.

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'); 
+0

Недопустимое имя столбца 'transdatetime'. – user3262364

+0

Я принимаю это из вашего комментария «у меня тоже есть место для трансдатетей». Исправьте его в соответствии с вашей реальной схемой. – Serg

+0

ok sir,. ,, i проверит – user3262364