2017-09-25 29 views
0

我正在嘗試計算sql中的庫存。我有4款產品,尺寸,購買和銷售。產品表通過在基礎顏色上添加列來計算庫存可用

+----+------------------+ 
| id | product_name  | 
+----+------------------+ 
| 1 | apple   | 
|----|------------------| 
| 2 |banana   | 
|----|------------------| 
| 3 |mango    | 
+----+------------------+ 

現在顏色表

+----+------------------+ 
| id | color_name  | 
+----+------------------+ 
| 1 | dark   | 
|----|------------------| 
| 2 | light   | 
+----|------------------+ 

購表人是

+-------+-------------+ 
| id | quantity |color 
+-------+-------------+ 
| 1 | 15  |dark 
+-------+-------------+ 
| 1 | 10  |light 
+-------+-------------+ 
| 2 | 5   |dark 
+-------+-------------+ 
| 3 | 25  |light 
+-------+-------------+ 

,銷售表

+-------+-------------+ 
| id | quantity |color 
+-------+-------------+ 
| 1 | 5   |dark 
+-------+-------------+ 
| 1 | 5   |light 
+-------+-------------+ 
| 2 | 5   |dark 
+-------+-------------+ 
| 3 | 5   |light 
+-------+-------------+ 

採購和銷售表有外鍵ID引用產品表的ID。現在,我嘗試計算顏色的基礎上,購買和銷售以下形式的股票可即相差太大

+----+------------------+-------------+ 
| id | product_name  | quantity |color 
+----+------------------+-------------+ 
| 1 | apple   | 10  |dark 
|----|------------------|-------------| 
| 1 | apple   | 5  |light 
|----|------------------|-------------| 
| 2 |banana   | 0  |dark 
|----|------------------|-------------| 
| 3 |mango    | 20  |light 
+----+------------------+-------------+ 

我有以下腳本,我曾嘗試:

SELECT p.id, 
     p.Name, 
     Purchase.purchaseQty - sales.salseQty AS totalQty 

FROM Product p 
    OUTER APPLY (
     SELECT purchase.id, 
       SUM(purchase.quantity) purchaseQty 

     FROM purchase 
     WHERE purchase.id = p.id 
     GROUP BY 
      purchase.id 
) Purchase 
    OUTER APPLY (
     SELECT sales.id, 
       SUM(sales.quantity) salseQty 
     FROM sales 
     WHERE sales.id = p.id 
     GROUP BY 
      sales.id 
) sales 
; 
+1

顏色是購買和銷售表中的一列嗎?或者你剛剛提到?如果它是一列,那麼你需要與顏色表的外鍵關係。 –

+1

你試過什麼? –

+0

@YogeshSharma有人能幫我解決這個解決方案SELECT p.id,p.Name,Purchase.purchaseQty-sales.salseQty作爲totalQty FROM產品p OUTER APPLY( SELECT purchase.id,SUM(purchase.quantity)purchaseQty FROM購買 其中purchase.id = p.id GROUP BY purchase.id )購買 OUTER APPLY( SELECT sales.id,SUM(sales.quantity)salseQty 銷售 其中sales.id = p.id GROUP BY sales.id )銷售 –

回答

2

這應該解決問題:

select P.id, Pr.product_name, 
     case when S.quantity is null then P.quantity 
      else P.quantity - S.quantity end as quantity, 
     P.color from purchase as P 
left join sales AS S on (P.id = S.id and P.color = S.color) 
join product AS Pr on Pr.id = P.id 
+0

此查詢不會顯示銷售量不添加 –

+0

我添加銷售:) –

+0

如果銷售表爲空現在購買表應該可用數量 –