这是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
DebitAccount
为5610
而TransactionPartnerName
为name one
Amounts
求和
2)对CreditAccount
5610
TransactionPartnerName
和name one
为CreditAccount
DebitAccount
求和
3)从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
总和扣除5610
总和
试过这段代码
151
但在帐号SUM(Amount)
的结果中获取值DebitAccount
。这意味着CreditAccount
和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
的{{1}}。
试图思考如何修改。
尝试过这样的事情
{{1}}
但得到空白页....
请建议需要纠正的内容
答案 0 :(得分: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
试试这个
编辑:删除了内部查询