2013-07-11 29 views
0

Transactions_Table:MySQL的減法SUM查詢一個單柱相同的表

+---------+--------+-------------+--------------+-----+ 
| DocType | SFCode | Productname | WarrantyCode | QTY | 
+---------+--------+-------------+--------------+-----+ 
| FP | 12  | Item  | 1111-01 | 100 | -100 
| FP | 12  | Item  | 2222-22 | 200 | 
| FP | 12  | Item  | 3333-33 | 350 | -350 

| LP | 12  | Item  | 4444-44 | 10 | 
| LP | 12  | Item  | 5555-55 | 20 | 
| LP | 12  | Item  | 6666-66 | 35 | -35 

| CAS | 12  | Item  | 1111-01 | 50 | -(50 Left, show) 
| CRS | 12  | Item  | 3333-33 | 120 | -(230 Left, show) 
| CRS | 12  | Item  | 6666-66 | 35 | -(0 Left, no show) 

| FPR | 12  | Item  | 1111-01 | 10 | -(40 Left, show) 
| LPR | 12  | Item  | 5555-55 | 20 | -(0 Left, no show) 
| CSR | 12  | Item  | 1111-01 | 5 | -(50+5 Left, show) 
| CRR | 12  | Item  | 6666-66 | 5 | -(Got back 5, show) 
+---------+--------+-------------+--------------+-----| 

KEY:

FP: Foreign Purchase 
LP: Local Purchase 

CAS: Cash Sale 
CRS: Credit Sale 

FPR: Foreign Purchase Return 
LPR: Local Purchase Return 

CSR: Cash Sale Return 
CRR: Credit Sale Return 

有很多產品,但現在集中在一個單一SFCode 「12」。

QTY是商店中的實體庫存現金,DocType是交易。

我需要用這張桌子做兩件事。

  1. 獲取當前股票是(FP + LP + CSR + CRR) - (FPR + LPR + CAS + CRS)注:有可能沒有一個特定的DocType

  2. 獲得保證的交易對於特定保修代碼尚未售罄的產品代碼。在表格最後一列(未命名)中從頂部到底部,然後您就會明白。

請建議Java-MySql語句來幫助我實現這個結果。任何幫助表示讚賞。

+1

你有什麼問題? – Matthew

+0

請說出您的問題 - 以及您嘗試了什麼,以及它如何不適合您。 –

+0

@Mthethew問題是我不知道如何去做我在mysql中用文字說的話。我是MySql和Java的新手,不知道如何編寫這樣的語句。 – HMH

回答

0

嘗試這樣的#1:

SELECT SFCode, SUM(FP+LP+CSR+CRR-FPR-LPR-CAS-CRS) AS Total FROM 
(SELECT SFCode, 
SUM(IF(DocType = "FP", QTY, 0)) AS FP, 
>>please fill out all the columns<<  
FROM Transactions_Table 
WHERE SFCode = "12" 
GROUP BY DocType); 

這是我拍的#2:(這是假設SFCode不是整數)

SELECT a.SFCode, a.WarrantyCode, (a.QTY-b.QTY) AS Stock FROM 
(SELECT SFCode, WarrantyCode, QTY 
FROM Transactions_Table 
WHERE SFCode = "12" 
AND DocType IN ('FP','LP','CSR','CRR') 
GROUP BY WarrantyCode) AS a 
LEFT JOIN 
(SELECT SFCode, WarrantyCode, QTY 
FROM Transactions_Table 
WHERE SFCode = "12" 
AND DocType IN ('FPR','LPR','CAS','CRS') 
GROUP BY WarrantyCode) AS b 
ON a.SFCode = b.SFCode AND a.WarrantyCode = b.WarrantyCode; 

不能真正檢驗這個我自己現在,但這至少應該給你一個想法。

+0

嗨馬克,感謝您的意見。我嘗試了你的兩個代碼,但不幸的是他們沒有工作,或者我做錯了什麼。 #1在feild列表中返回「未知列」FP',並且#2不會給出任何錯誤但返回0行。 – HMH

+0

馬克,爲#2我改變了「和保修代碼IN(.....)到DocType IN(....)」,現在它工作..謝謝!只需要檢查#1 – HMH

+0

#2有什麼問題:如果沒有針對特定保修代碼的交易,您能否提供建議?目前,這隻返回保證代碼(s),也有一個交易從中減去。如果沒有東西要減去,它不會顯示。 – HMH