2013-07-01 70 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