2013-06-02 26 views
0

我的項目是關於一家珠寶店,我試圖找到每個產品類別的利潤。 讓我更具體如何找到類別的利潤

我有3個表,給了我的信息:

SALES(salesid,產品ID,數量,價格)

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

RETURN(salesid,產品ID,日期,數量,價格)

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

採購(procurementid,產品ID,數量,價格)

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

PRODUCT_CATEGORY(類別ID,類別)

categoryid category 
1   Gold 
2   Silver 
. 
5   Platin 

產品(產品ID,類別ID)

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 

不知道問題在哪裏......我做了很多改變和切換,但沒有出現......任何建議都會如此有用。謝謝你的進步

回答

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子句,你加入的成本子查詢後,您可以添加產品和採購表但不要加入他們。這將導致笛卡爾聯接,這將甩掉你的結果。
  • 在where子句中,您不指定要使用哪個表日期字段。 AND YEAR(date) = 2013應該是e.datef.date。如果你試圖運行它,應該給你一個錯誤。
  • WHERE MONTH(f.date) = MONTH(e.date)哪個表是f.date指的?你沒有給別名f任何表。
  • 您加入採購並使用其日期字段按月過濾結果,但您的收入,退貨和成本子查詢總計中沒有一個考慮日期。這將甩掉你的結果。