2016-08-30 15 views
2

我想找出用戶的借方和貸方交易之和的差額並列出。查找不同用戶的列之和的差額

這裏是我已經嘗試了查詢:

SELECT *, (val1 - val2) 
FROM (SELECT *, sum(transactionAmount) AS val1 
     FROM tableTransaction 
     WHERE creditedToNum = My_Number 
     GROUP BY debtToNum) db 
JOIN (SELECT *, sum(transactionAmount) AS val2 
     FROM tableTransaction 
     WHERE debtToNum = My_Number 
     GROUP BY creditedToNum) Cr 
WHERE db.transactionStatus = 1 
    AND db.isActive = 1; 

它返回0行,但實際產量應該是如下
這裏是我的表結構:

| Amount | Credit_to | Debit_to | 
|--------|-----------|-----------| 
| 2000 | My_Number | Number_1 | 
| 5000 | My_Number | Number_2 | 
| 3000 | Number_1 | My_Number | 
| 4000 | Number_2 | My_number | 
| 2000 | My_Number | Number_2 | 

什麼實際我想要的結果是:

| Name  | Amount | 
|----------|--------| 
| Number_1 | 1000 | 
| Number_2 | 3000 | 
+0

該查詢不可讀。不管你的Java代碼如何構造它,顯示實際的SQL。目前的查詢有什麼問題? –

+0

@CL。我已更新我的查詢.. –

回答

1

查詢中沒有連接條件。

取而代之的加盟,這可能是一個更好的主意,用一個compound query帶來的數據轉換成有用的形式:

SELECT Credit_to AS Name, Amount 
FROM tableTransaction 
WHERE Debit_to = @My_Number 
UNION ALL 
SELECT Debit_to, -Amount 
FROM tableTransaction 
WHERE Credit_to = @My_Number; 
 
| Name  | Amount | 
|----------|--------| 
| Number_1 | 3000 | 
| Number_2 | 4000 | 
| Number_1 | -2000 | 
| Number_2 | -5000 | 
| Number_2 | -2000 | 

然後就組吧:

SELECT Name, SUM(Amount) AS Total 
FROM (SELECT Credit_to AS other, Amount 
     FROM tableTransaction 
     WHERE Debit_to = @My_Number 
     UNION ALL 
     SELECT Debit_to AS other, -Amount 
     FROM tableTransaction 
     WHERE Credit_to = @My_Number) 
GROUP BY Name 
ORDER BY Name; 
 
| Name  | Total | 
|----------|-------| 
| Number_1 | 1000 | 
| Number_2 | -3000 |