0

这是MySQL表

Amount | DebitAccount | CreditAccount | TransactionPartnerName
--------------------------------------------------------------
 1     |     5610     |     5720      |    name one
 150   |     7210     |     5610      |    name one

需要得到这样的东西

name one result for account 5610 = 149.
((`CreditAccount` for `5610`) - (`DebitAccount` for `5610`)) = 149

换句话说:

1)总和Amounts的地方和DebitAccount5610TransactionPartnerNamename one

2)总结所有Amounts地方CreditAccount5610和是TransactionPartnerNamename one

3) 从CreditAccount总和减去DebitAccount总和

试过这段代码

SELECT TransactionPartnerName, SUM(Amount) 
FROM ( SELECT * FROM 2_1_journal) DATA 
WHERE (CAST(DebitAccount AS UNSIGNED) IN (?) OR CAST(CreditAccount AS UNSIGNED) IN (?)) 
GROUP BY TransactionPartnerName

但结果为 account 5610get value 151。代表着SUM(Amount)这和DebitAccountCreditAccount

想了想怎么修改。

尝试过这样的事情

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

FROM 

(
SELECT DebitAccount, 

SUM( Amount ) AS Amount FROM 
( SELECT * FROM 2_1_journal) DATA 

GROUP BY DebitAccount 
) d ON (AccountNumber = d.DebitAccount)

(
SELECT CreditAccount, 
SUM( Amount ) AS Amount FROM 
( SELECT * FROM 2_1_journal) DATA 
GROUP BY CreditAccount 
) c ON (AccountNumber = c.CreditAccount) 

GROUP BY TransactionPartnerName

但得到空白页....

请告知需要纠正的地方

4

1 回答 1

1
SELECT TransactionPartnerName, SUM(if(CAST(DebitAccount AS UNSIGNED) IN (?), -Amount, Amount)) 
FROM 2_1_journal DATA 
WHERE (CAST(DebitAccount AS UNSIGNED) IN (?) OR CAST(CreditAccount AS UNSIGNED) IN (?)) 
GROUP BY TransactionPartnerName

尝试这个


编辑:删除内部查询

于 2013-07-24T08:52:53.000 回答