2016-07-15 3 views
0

У меня есть структура базы данных, как показано на рисунке (это упрощенно) simplified database structureВычислить в нескольких, где положение MySQL

так что теперь я хочу, чтобы вычислить продукцию во всех акций, чтобы результат выглядел как (это при условии, что магазин таблица имеет две записи store1 и store2):

enter image description here

, если это не представляется возможным этот формат является приемлемым слишком

enter image description here

Основная проблема заключается в том, что я не могу понять, как мне рассчитать текущий запас для каждого магазина.

the curent stock for each stock = sum of all productin this stock 
           - sum of all productout this stock 
           + sum of all producttransfer with transfertype=0 in this stock 
           - sum of all producttransfer with transfertype=1 in this stock 

так, как я должен вычислить его для каждого магазина, когда магазин номер не зафиксирован

+0

Это действительно необычный дизайн для системы запаса. Можете ли вы изменить дизайн (по крайней мере, немного)? Если я правильно ее понимаю, вы добавили/получили таблицу для каждого типа изменений запасов, где вы могли бы и должны просто добавить столбец с типом (вы все равно можете иметь дополнительные таблицы для получения дополнительной конкретной информации, хотя это и не обязательно) , и, может быть, колонку для магазина тоже, но я думаю, что это не соответствовало бы вашей дизайнерской идее. Ваша модель похожа на магазин, добавленный к действительно универсальной модели действий, которая не должна была быть магазином. – Solarflare

+0

В противном случае вы можете присоединиться ко всем вашим таблицам действий, группе через хранилище, а затем использовать 'sum (case, когда productin.id имеет значение null, а затем actiondetails.Quantity else 0 end) + sum (case when productout.id then -actiondetails.Quantity else 0 end) + ... 'или что-то подобное. – Solarflare

ответ

0

Я думаю, что это должно работать, я сочинительство его на ходу, так не может быть 100% уверены, что и там могут быть некоторые опечатки

select A1.ProductID, A1.storehouseID, (SUM(IN)-SUM(OUT)) as quantity 
    from (
      Select AD.productID, A.storehouseID, SUM(AD.Quantity) as IN 
      from actions A inner join productIN PI on A.ID = PI.ID 
         inner join actiondetails AD on PI.ID = AD.ID 
    group by AD.productID, A.storehouseID 

    UNION 

      select AD.ProductID, A.storehouseID, SUM(AD.Quantity) 
      from actions A inner join ProductTransfers T on A.ID = T.ID 
          inner join actiondetails AD on A.ID = AD.ID 
      where transferType = 0 
      group by AD.ProductID, A.storehouseID) as A1 

                 inner join 

      (select AD.productID, A.storehouseID, SUM(AD.Quantity) as Out 
      from actions A inner join ProductOut PO on A.ID = PO.ID 
          inner join actiondetails AD on AD.ID = A.ID 
      group by AD.ProductID, A.storehouseID 

    UNION 

      select AD.productID, A.storehouse.ID, SUM(AD.Quantity) as Out 
      from actions A inner join ProductTransfers T on A.ID = T.ID 
          inner join actiondetails AD on AD.ID = A.ID 
      where TransferType = 1 
      group by AD.ProductID, A.storehouseID) as A2 
      on A1.ProductID = A2.ProductID and A1.storehouseID = A2.storehouseID 
    group by A1.ProductID, A1.StorehouseID 
Смежные вопросы