在一个SQL查询中使用多个SQL查询结果

时间:2017-04-01 15:22:56

标签: mysql sql

我有一个包含两个MySQL表的项目;

  • LedgerSchedule
  • GeneralLedger

第一个表LedgerSchedule包含GeneralLedger中使用的可能类型。 GeneralLedger中的每条记录都可以是CREDIT或DEBIT事务(来自LedgerSchedule类型)。

现在,如果我想使用GeneralLedger交易创建交易调查,我会在项目中运行三个查询;

  • 选择可能的LedgerSchedule
  • 为每个LedgerSchedule选择CREDIT GeneralLedgers
  • 为每个LedgerSchedule选择DEBIT GeneralLedgers

在这三个查询之后,我将(DEBIT-CREDIT)金额保存回每个LedgerSchedule。 这有效,但速度很慢(特别是当有很多LedgerSchedule时)。 为了加快速度,我想用一个MySQL查询完成这个任务。

总结我想在一个查询中选择LedgerSchedule及其CREDIT / DEBIT GeneralLedgers金额。

第一次尝试(在本例中我只选择LedgerSchedule中的ID);

enter image description here

但是这只选择具有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        |         |         |

我怎样才能做到这一点?甚至可能在一个查询中没有多个选择......

1 个答案:

答案 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;