2013-07-01 110 views
0

需要從貸方和借方賬戶號碼相同的借方總計中減去貸方總計。如果一個值僅存在於借方帳號中,則不需要扣除,只需要獲取該值。Mysql減去SUM(金額)DebitAccount從SUM(金額)CreditAccount如果DebitAccount == CreditAccount

一臺名爲18_7_ChartOfAccounts看起來是這樣的:

ID | AccountNumber 
------------- 
1 | 2310 
2 | 2380 

另一臺名爲2_1_journal看起來是這樣的:在此基礎上總結在Amount列所有值建議創建查詢

ID | Amount | DebitAccount | CreditAccount 
------------------------------------------- 
1 | 25.00 | 2310   | 2380 
2 | 200.00 | 2310   | 2380 
3 | 4.00 | 2380   | 2310 
4 | 200.00 | 2380   | 2310 
5 | 50.00 | 2380   | 2620 

其中DebitAccount值是一樣的。

查詢執行以下操作:SUM(Amount) FROM表2_1_journal WHERE DebitAccount2_1_journal是表一樣AccountNumber18_7_ChartOfAccounts

$query_debit_beginning = "SELECT SUM(j.Amount), j.DebitAccount FROM 18_7_ChartOfAccounts AS c LEFT JOIN 2_1_journal AS j ON (c.AccountNumber = j.DebitAccount) group by j.DebitAccount"; 

不明白其他如何subtrac一個總和。

需要去輸出這樣

帳戶號碼是2310,Value爲21.00(25 + 200-4-200)

帳戶號碼是2380,Value爲29.00(4 + 200 + 50 - 25-200)

帳戶號碼是2620,值爲-50.00(0(DebitAccount週轉) - 50(CreditAccount營業額))

查詢應該是以下:

SUM(Amount) FROM表2_1_journal WHERE DebitAccount在表2_1_journal相同AccountNumber在表18_7_ChartOfAccounts

然後

SUM(Amount) FROM表2_1_journal WHERE CreditAccount在表2_1_journal相同AccountNumber在表18_7_ChartOfAccounts

然後

如果DebitAccount等於CreditAccount,則減去SUM(Amount) DebitAccount from SUM(Amount) CreditAccount

不知道如何創建這樣的查詢。請指教。

基於建議嘗試添加選擇條件。 這裏是修改。代碼是否正確?嘗試並顯示爲必要的工作

SELECT 
a.AccountNumber, 
IFNULL(d.Amount, 0) - IFNULL(c.Amount, 0) AS Amount 

FROM 18_7_ChartOfAccounts AS a 

LEFT JOIN (
SELECT 
    DebitAccount, RecordYear, 
    SUM(Amount) AS Amount 
FROM 2_1_journal WHERE RecordYear = 2013 
GROUP BY DebitAccount 
) d ON (a.AccountNumber = d.DebitAccount) 

LEFT JOIN (
SELECT 
    CreditAccount, RecordYear, 
    SUM(Amount) AS Amount 
FROM 2_1_journal WHERE RecordYear = 2013 
GROUP BY CreditAccount 
) c ON (a.AccountNumber = c.CreditAccount) 

回答

6
SELECT 
    a.AccountNumber, 
    IFNULL(d.Amount, 0) - IFNULL(c.Amount, 0) AS Amount 

FROM 18_7_ChartOfAccounts AS a 

LEFT JOIN (
    SELECT 
     DebitAccount, 
     SUM(Amount) AS Amount 
    FROM 2_1_journal 
    GROUP BY DebitAccount 
) d ON a.AccountNumber = d.DebitAccount 

LEFT JOIN (
    SELECT 
     CreditAccount, 
     SUM(Amount) AS Amount 
    FROM 2_1_journal 
    GROUP BY CreditAccount 
) c ON a.AccountNumber = d.CreditAccount 
+0

似乎代碼是使用帳戶進行計算的金額。我得到了[[AccountNumber] => 2310 [Amount] => 0 [AccountNumber] => 2380 [Amount] => 0 [AccountNumber] => 2620 [Amount] => -2620' – user2360831

+0

我的不好。更新的查詢。 SELECT應該SUM'amount'字段,而不是CreditAccount或DebitAccount。 – walterquez

+0

現在在Mysql中只有一行'1 | 25.00 | 2310 | 2380'和輸出是[[AccountNumber] => 2310 [Amount] => 50.00'和[[AccountNumber] => 2380 [Amount] => -75.00'出現它以某種方式總和2倍一個值... – user2360831

2

像這樣的東西應該這樣做(未測試)

SELECT a.ID, a.AccountNumber, IFNULL(CreditAmount, 0) - IFNULL(DebitAmount, 0) 
FROM 18_7_ChartOfAccounts a 
LEFT OUTER JOIN (SELECT DebitAccount AS AccountNo, SUM(Amount) AS DebitAmount FROM 2_1_journal GROUP BY DebitAccount) b ON a.AccountNumber = b.AccountNo 
LEFT OUTER JOIN (SELECT CreditAccount AS AccountNo, SUM(Amount) AS CreditAmount FROM 2_1_journal GROUP BY CreditAccount) c ON a.AccountNumber = c.AccountNo 
LEFT OUTER JOIN 2_1_journal c ON a.AccountNumber = c.CreditAccount 
GROUP BY a.ID, a.AccountNumber 
+0

得到錯誤'SQLSTATE [42S22]:列未找到:1054未知列「一。ID'in'field list''抱歉,看起來是我的錯誤。將檢查我的列名。已經有了值的數組。看起來代碼有效。將再次檢查 – user2360831

+0

a.ID不應包含在GROUP BY中。發佈了類似的答案,但只有GROUP BY用於AccountNumber。 – walterquez

+0

它應該包含在GROUP BY中(如果它正在輸出)。 MySQL確實允許它不被包含,但是如果沒有包括,大多數SQL的風格都會出錯。一般而言,將GROUP BY中的返回字段排除在外並不是一個好習慣。 – Kickstart