расчет баланса счета из таблицы дебетов и кредитов

0

У меня такая таблица учетных записей

+-----------+--------------+
|     fld_id|         name |
+-----------+--------------+
|         1 |         Bank1|
|         2 |         Bank2|
|         4 |         Bank3|
+-----------+--------------+

Таблица доходов

+-----------+--------------+---------------+-------------+
| fld_id    | fld_type     | fld_account id| fld_amount  |
+-----------+--------------+---------------+-------------+
|         1 |         Salry|            1  |     400     |
|         2 |         Rent |            2  |     500     |
|         4 |       Others |            1  |    1000     |
+-----------+--------------+---------------+-------------+

Таблица оплаты

+-----------+--------------+---------------+-------------+
| fld_id    | fld_type     | fld_account id| fld_amount  |
+-----------+--------------+---------------+-------------+
|         1 |         Food |            2  |     200     |
|         2 |    Entertain |            2  |     300     |
|         4 |    Transport |            1  |     400     |
+-----------+--------------+---------------+-------------+

Я хочу, чтобы итоговая таблица баланса для счетов с суммой дохода, расхода и баланса, как эта таблица -

+-----------+--------------+---------------+-------------+
| account   | Income       | Expence       | Balance     |
+-----------+--------------+---------------+-------------+
|     Bank1 |         1400 |          400  |    1000     |
|     Bank2 |          500 |          500  |       0     |
|     Bank3 |            0 |            0  |       0     |
+-----------+--------------+---------------+-------------+

Пока я пишу этот запрос и получаю доход и расходы, но не нашел способа расчета баланса, мой запрос и результат --query

SELECT fld_account as account, Income, Expense
from tbl_accounts
LEFT JOIN (SELECT fld_account_id, SUM(fld_amount) as Income FROM tbl_revenue tr GROUP BY tr.fld_account_id) tc on fld_id=tc.fld_account_id
left JOIN (SELECT fld_account_id, SUM(fld_amount) as Expense FROM tbl_payment tp GROUP BY tp.fld_account_id) td on fld_id=td.fld_account_id

и результат подобен ниже -

+-----------+--------------+---------------+
| account   | Income       |   Expense     | 
+-----------+--------------+---------------+
|     Bank1 |         1400 |         400   |
|     Bank2 |          500 |         500   |
|     Bank3 |         Null |         Null  |
+-----------+--------------+---------------+

Как я могу рассчитать таблицу платежей и формулу баланса и присоединиться к ней со своей учетной записью? Любая помощь очень ценится.

Теги:
database
join
sum

1 ответ

2
Лучший ответ

Просто используйте coalesce():

SELECT fld_account as account, COALESCE(Income, 0) as Income,
       COALESCE(Expense, 0) as Expense,
       ( COALESCE(Income, 0) - COALESCE(Expense, 0) ) as balance
FROM tbl_accounts LEFT JOIN
     (SELECT fld_account_id, SUM(fld_amount) as Income
      FROM tbl_revenue tr
      GROUP BY tr.fld_account_id
     ) tc 
     ON fld_id = tc.fld_account_id LEFT JOIN
     (SELECT fld_account_id, SUM(fld_amount) as Expense
      FROM tbl_payment tp
      GROUP BY tp.fld_account_id
     ) td 
     ON fld_id = td.fld_account_id;

COALESCE() - это стандартная функция ANSI, которая возвращает первый аргумент non- NULL.

  • 0
    Одна вещь, пожалуйста, объясните, что на самом деле сделал coalesec ()?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню