2016-04-07 4 views
1

у меня есть три таблицы в database:MySQL: собрать сумму соответствующих значений

Таблица: статья

id | code | name   | quantity | stock_date 
-------------------------------------------------- 
1 1dfod Article name 10  2016-04-01 

Таблица: продажа

id | client_id | selling_type_id | selling_date | selling_status 
---------------------------------------------------------------- 
1 1   1     2016-04-02  1 
2 1   1     2016-04-03  1 
3 1   1     2016-04-04  1 

таблица: sales_detail

id | selling_id | article_id | quantity 
------------------------------------- 
1 1   1   2 
2 1   1   3 
3 1   1   1 
4 2   1   3 
5 3   1   1 

в конце я бы stock record в этой статье, как это:

date  | in_stock (item in stock) | out_stock (sum of item sold) 
---------------------------------------------------------------------- 
2016-04-01 10       0 
2016-04-02 0       6 
2016-04-03 0       3 
2016-04-04 0       1 

Все mysql запросы к моему знанию не дают мне этот результат.

Вот мой код:

SELECT SUM(sd.quantity) out_stock, s.search_date, ifnull(ss.quantity, 0) in_stock 
FROM selling_detail sd JOIN selling s ON (sd.selling_id = s.id) 
LEFT JOIN shop_stock ss ON (ss.search_date = s.search_date) WHERE (sd.shop_stock_id = 1) 
GROUP BY s.search_date; 
+3

Ну, по крайней мере, показать нам свои лучшие усилия – Strawberry

+0

Я голосую, чтобы закрыть этот вопрос не по теме, потому что ОП не сделал усилия по решению проблемы самостоятельно. ' –

ответ

1
SELECT date,SUM(in_stock) in_stock,SUM(out_stock) out_stock FROM 
(
SELECT stock_date date,quantity in_stock,0 out_stock FROM article 
    UNION 
SELECT selling_date,0,quantity FROM selling JOIN selling_detail ON selling_detail.selling_id = selling.id 
) x 
GROUP BY date; 
+0

Спасибо, все работает отлично! – nekiala

+0

Я бы использовал UNION ALL здесь, как вы знаете, не будет никаких обманов, и вы сохраните операцию. Я также помещал SUM внутри подзапросов в надежде, что использование любой временной памяти будет меньше. – Arth

0

Как вы пытаетесь объединить аналогичные данные из двух различных таблиц, вы, вероятно, глядя в дуло UNION ALL.

Что-то вдоль этих линий вы должны получить начал:

 SELECT * 
     FROM (
     SELECT a.stock_date `date`, 
       SUM(a.quantity) `in_stock (item in stock)`, 
       0 `out_stock (sum of item sold)` 
      FROM article a 
      WHERE a.id = :article_id 
     GROUP BY `date`   
     UNION ALL 
     SELECT s.selling_date, 
       0,  
       SUM(sd.quantity) 
      FROM selling s 
      JOIN selling_detail sd 
      ON sd.selling_id = s.id 
      AND sd.article_id = :article_id 
     /* WHERE s.selling_type = ?? 
      AND s.selling_status = ?? /* If necessary */ 
     GROUP BY `date`   
      ) sr 
    ORDER BY `date` 
+0

Здравствуйте, Спасибо за ваш ответ. Однако у меня есть ошибки. – nekiala

+0

Я вижу, что вы нашли решение, но в будущем, пожалуйста, уточните, что такое ошибки. – Arth

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