2013-06-02 3 views
0

Мой проект о ювелирном магазине, и я стараюсь найти прибыль каждой категории продуктов. Позвольте мне быть более конкретнымКак найти Прибыль для категории

У меня есть 3 таблицы, которая дает мне информацию:

ПРОДАЖ (salesid, ProductID, количество, стоимость)

salesid productid Quantity Price 
11001 13001  4  5 
11002 13002  6  10 
11003 13003  5  16 
. 
. 
11012 13012  7  15 

RETURN (salesid, ProductID, дата, количество , цена)

salesid productid Quantity Price 
11003 13003  1  16 
11007 13007  3  12 
11008 13008  3  8 

ЗАКУПКИ (procurementid, ProductID, количество, цена)

procurementid productid Quantity Price 
100001   13001  10  2 
100002   13002  10  2 
. 
. 
100012   13012  10  2 

PRODUCT_CATEGORY (CategoryID, категория)

categoryid category 
1   Gold 
2   Silver 
. 
5   Platin 

продукта (ProductID, CategoryID)

Productid categoryid 
13001  1 
13002  3 
. 
. 
13010  5 

Прибыль дается от этого типа:

Profit=Quantity*Price(Sell)-Quantity*Price(Return)-Quantity*Price(Procurement) 

А теперь вот проблема .. Я подошел к этому до сих пор

SELECT categoryid, 
     category, 
     (coalesce(a.rev,0)- coalesce(b.ret,0), 
          coalesce(c.cost,0)) AS profit 
FROM product category AS g 
    JOIN product AS h ON g.categoryid = h.categoryid 
    JOIN 
     (SELECT categoryid, 
       sum(quantity*price) AS rev 
     FROM sales AS a, 
      product AS b 
     WHERE a.productid = b.productid 
     GROUP BY categoryid) a 
    LEFT OUTER JOIN 
     (SELECT cartegoryid, 
       sum(quantity*price) AS ret 
     FROM RETURN AS a , 
         product AS b 
     WHERE a.productid = b.productid 
     GROUP BY categoryid) b ON a.categoryid = b.categoryid 
    LEFT OUTER JOIN 
     (SELECT categoryid, 
       sum(quantity*price) AS cost 
     FROM procurement AS a, 
      product AS b 
     WHERE a.productid = b.productid 
     GROUP BY categoryid) c ON a.categoryid = c.categoryid , 
    product AS d, 
    procurement AS e 
WHERE MONTH(f.date) = MONTH(e.date) 
    AND YEAR(date) = 2013 

[извините за совместятся Я новичок на сайт не знаю, как скопировать код вставки хорошо (: D)] wahtever, когда я делаю это дело доходит до состояния, как

categoryid category profit 
1   Gold  -100 
2   Silver -100 
. 
5   Platin -100 

не знаю где проблема ... я сделал много изменений и переключений, но ничего не пришло ... любое предложение было бы так полезно.Спасибо в advane

ответ

0

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

(coalesce(a.rev,0) - coalesce(b.ret,0),coalesce(c.cost,0)) as profit 

должен быть этот

coalesce(a.rev,0) - coalesce(b.ret,0) - coalesce(c.cost,0) AS profit 

Немного больше проблем с этим запросом

  • Прямо перед где положение, после того, как вы присоединиться к подзапрос стоимости, добавить продуктов и закупок таблицы но не присоединяйтесь к ним. Это приведет к декартовому соединению, которое сбросит ваши результаты.
  • В предложении where вы не укажете, какие поля даты таблицы вы хотите использовать. AND YEAR(date) = 2013 должно быть e.date или f.date. Это должно было дать вам ошибку, если вы попытались запустить ее.
  • WHERE MONTH(f.date) = MONTH(e.date) какой стол является f.date со ссылкой на? Вы не указали псевдоним f в любой таблице.
  • Вы присоединяетесь к закупкам и используете свое поле даты, чтобы фильтровать результаты по месяцам, но ни один из ваших итогов итогов доходов, возвратов и затрат не учитывает даты. Это отбросит ваши результаты.
Смежные вопросы