2015-02-14 2 views
1

Я разрабатываю приложение управления запасами, используя и использую СУБД MySQL с механизмом InnoDB, в настоящее время я хочу сгенерировать отчет, который вычисляет физическую величину для продуктов, вычисляя разницу между SUM столбца IN_OUT, используя запрос MySQL.Как вычислить физическую величину, вычисляя разницу между IN и OUT

Я использую значение "1" в in_out_products, как в и "0" в качестве OUT

так что нужен столбец, который имеет разность между OUT и IN
IN - OUT = физическая величина для каждого продукта

в более ясной форме я имею в виду разницу между SUM (количество), где IN_OUT = 1 и СУММА (количество), где IN_OUT = 0, IN_OUT столбец в таблице in_out_products

первая таблица

select * from products; 


+------------+--------------+-------------+----------------+-------+------------+ 
| product_id | product_code | part_number | product_name | brand | location | 
+------------+--------------+-------------+----------------+-------+------------+ 
|   1 | 100100  | 100200  | RICHO maginate | RICHO | location 4 | 
|   2 | 1112211  | 100300  | RICHO Cyan  | RICHO | location 4 | 
|   3 | 111333  | 100400  | RICHO Yellow | RICHO | location 4 | 
+------------+--------------+-------------+----------------+-------+------------+ 

второй стол

+-----------+------------+--------------+-------------+----------+--------+ 
| record_id | product_id | product_code | part_number | quantity | in_out | 
+-----------+------------+--------------+-------------+----------+--------+ 
|   1 |   1 | 100100  | 100200  |  10 |  1 | 
|   2 |   1 | 100100  | 100200  |  10 |  1 | 
|   3 |   1 | 100100  | 100200  |  30 |  1 | 
|   4 |   2 | 1112211  | 100300  |  10 |  1 | 
|   5 |   2 | 1112211  | 100300  |  10 |  1 | 
|   6 |   2 | 1112211  | 100300  |  10 |  1 | 
|   7 |   2 | 1112211  | 100300  |  10 |  1 | 
|   8 |   3 | 111333  | 100400  |  10 |  1 | 
|   9 |   3 | 111333  | 100400  |  10 |  1 | 
|  10 |   3 | 111333  | 100400  |  10 |  1 | 
+-----------+------------+--------------+-------------+----------+--------+ 

теперь я хочу, чтобы создать SQL-запрос, который отобразить все продукты там с текущим количеством, я не сумел, что до сих пор мне удалось получить количество с использованием этого запрос.

SQL запрос расчета количества для каждого продукта:

select p.product_id, 
     p.product_id, 
     p.product_code, 
     p.product_name, 
     SUM(io.quantity) as physical_quantity 
     from products as p, 
     in_out_products as io where p.product_id=io.product_id and io.deleted_at is null and in_out=1 group by p.product_id; 

результат

+------------+------------+--------------+----------------+-------------------+ | product_id | product_id | product_code | product_name | physical_quantity | +------------+------------+--------------+----------------+-------------------+ | 1 | 1 | 100100 | RICHO maginate | 50 | | 2 | 2 | 1112211 | RICHO Cyan | 40 | | 3 | 3 | 111333 | RICHO Yellow | 30 | +------------+------------+--------------+----------------+-------------------+

+0

Что вы имеете в виду ** отображение всех продуктов с текущим количеством **. Можете ли вы добавить ожидаемый результат –

+0

, что я хочу сказать, что хочу получить разницу между SUM (количество), где in_out = 1 и SUM (количество), где in_out = 0, этот столбец в таблице in_out_products –

ответ

1

Если не ошибаюсь, вы должны использовать Conditional Aggregate

select p.product_id, 
     p.product_id, 
     p.product_code, 
     p.product_name, 
     SUM(io.quantity) as physical_quantity, 
     SUM(case when in_out=1 then io.quantity else 0 END) - 
     SUM(case when in_out=0 then io.quantity else 0 END) AS Difference 
from products as p 
Join in_out_products as io 
on p.product_id=io.product_id 
Where io.deleted_at is null 
and in_out=1 
group by p.product_id; 
+0

спасибо за ваш ответ, но я получаю синтаксическая ошибка 'У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с SUM (в случае, когда in_out = 1, затем io.quantity else 0 END) - SUM (случай, когда in_o 'по строке 6 \t 0.013 sec' –

+0

Thanks он работает сейчас;) –

Смежные вопросы