簡體   English   中英

僅在一張表中求和-MySQL

[英]SUM in just one table - Mysql

我有以下情況。 我正在建立一個庫存控制系統,並通過它來控制產品的進出。

在一張桌子上,我有產品(代碼,說明)。

在另一個表中,記錄產品的移動(代碼,product_code,[入,出]類型,數量,日期)。

當我嘗試計算輸入的內容時,輸出的內容越少,它就不起作用。

我的查詢:

SELECT SUM(s1.quantity) - SUM(s2.quantity)
FROM `stock_movement` AS s1
JOIN `stock_movement` AS s2 
ON s1.code_product = s2.code_product
WHERE s1.type = 'IN'
AND s2.type = 'OUT';

結果: 80

此處正確的結果應該是(40 + 20)-(10 + 10)= 40,但是此查詢考慮的是所有輸入的類型均為IN和OUT,因此結果為80。

有人知道我在做什么錯嗎? 下表數據如下:

表STOCK_MOVEMENT:

| CODE | CODE_PRODUCT | TYPE | QUANTITY | DATA |
| 1 | 30 | IN | 20 | 2018-01-20 |
| 2 | 30 | IN | 40 | 2018-02-03 |
| 3 | 30 | OUT | 10 | 2018-01-20 |
| 4 | 30 | OUT | 10 | 2018-02-03 |

表庫存:

| CODE | 描述|

| 30 | TEST_PRODUCT |

您無需在此處自行加入,只需使用條件聚合即可:

SELECT
    CODE_PRODUCT,
    SUM(CASE WHEN TYPE = 'IN'  THEN QUANTITY ELSE 0 END) -
    SUM(CASE WHEN TYPE = 'OUT' THEN QUANTITY ELSE 0 END) AS diff
FROM stock_movement
GROUP BY CODE_PRODUCT;

請注意,我按產品進行匯總。 對於您的特定樣本數據集,只有一種產品,因此我們可以刪除GROUP BY並獲得相同的結果。 但實際上,您可能需要一個可處理多種產品的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM