Как создать сумму частичного платежа и непогашенный платеж

#postgresql

#postgresql

Вопрос:

У меня есть 2 таблицы, как показано ниже:-

 Table: Invoice
InvDate     InvNo   InvAmount
01/01/2016  T0001   3000
02/01/2016  T0002   8000

Table: Payment
ResDate     ResType ResNo   ResAmount   InvNo
01/01/2016  C       R0001   3000        T0001
02/01/2016  P       R0002   2000        T0002
04/01/2016  P       R0003   2000        T0002   
  

Для чего мне нужен вывод, как показано ниже:-

 InvDate     InvNo   InvAmount   Cash    Partial Balance
01/01/2016  T0001   3000        3000    -       0
02/01/2016  T0002   8000        -       4000    4000
  

Я потерял свой запрос при попытке ввести значение в новый столбец Cash, если оплата производится наличными, а сумма (частичная оплата) — частичная, а затем вычислить остаток, если он все еще остается непогашенным.

Я не знаю, как построить этот запрос.. пожалуйста, помогите мне.

Ответ №1:

 SELECT i.invdate, i.invno, i.invamount,
       sum(CASE WHEN p.restype = 'C' THEN p.resamount END) AS cash,
       sum(CASE WHEN p.restype = 'P' THEN p.resamount END) AS partial,
       i.invamount - sum(p.resamount) AS balance
FROM invoice i
   JOIN payment p USING (invno)
GROUP BY i.invdate, i.invno, i.invamount
ORDER BY i.invdate;

┌────────────┬───────┬───────────┬─────────┬─────────┬─────────┐
│  invdate   │ invno │ invamount │  cash   │ partial │ balance │
├────────────┼───────┼───────────┼─────────┼─────────┼─────────┤
│ 2016-01-01 │ T0001 │   3000.003000.00 │         │    0.00 │
│ 2016-02-01 │ T0002 │   8000.00 │         │ 4000.004000.00 │
└────────────┴───────┴───────────┴─────────┴─────────┴─────────┘
(2 rows)
  

Комментарии:

1. Здравствуйте, спасибо за ответ и так быстро. Если я хочу поставить «-«, если нет значения для частичного или наличного платежа, как? В любом случае ваш ответ уже спас мои дни. Большое вам спасибо.