我有一个包含两个MySQL表的项目;
第一个表LedgerSchedule包含GeneralLedger中使用的可能类型。 GeneralLedger中的每条记录都可以是CREDIT或DEBIT事务(来自LedgerSchedule类型)。
现在,如果我想使用GeneralLedger交易创建交易调查,我会在项目中运行三个查询;
在这三个查询之后,我将(DEBIT-CREDIT)金额保存回每个LedgerSchedule。 这有效,但速度很慢(特别是当有很多LedgerSchedule时)。 为了加快速度,我想用一个MySQL查询完成这个任务。
总结我想在一个查询中选择LedgerSchedule及其CREDIT / DEBIT GeneralLedgers金额。
第一次尝试(在本例中我只选择LedgerSchedule中的ID);
但是这只选择具有DEBIT和CREDIT事务的GeneralLedgers。将此更改为
WHERE LS.ID = DEBIT.ID
OR LS.ID = CREDIT.ID
也不工作。接下来我还想选择LedgerSchedule而没有任何GeneralLedgers DEBIT / CREDIT交易。
| LedgerSchedule | Debit | Credit |
| 1 | €30.00 | |
| 2 | | €23.45 |
| 3 | | |
| 4 | €15.15 | €10.00 |
| 5 | | |
我怎样才能做到这一点?甚至可能在一个查询中没有多个选择......
答案 0 :(得分:0)
如果我理解正确,你只需要条件聚合:
select gl.ledger_schedule_id,
sum(case when gl.debit_credit = 1 then gl.amount else - gl.amount
end) as net
from GeneralLedger gl
group by gl.ledger_schedule_id;
如果debit_credit
可以采用0或1以外的值,则需要where
子句来防止过度计数。
如果您想分开金额:
select gl.ledger_schedule_id,
sum(case when gl.debit_credit = 1 then gl.amount end) as credit,
sum(case when gl.debit_credit = 0 then gl.amount end) as debit
from GeneralLedger gl
group by gl.ledger_schedule_id;