#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.00 │ 3000.00 │ │ 0.00 │
│ 2016-02-01 │ T0002 │ 8000.00 │ │ 4000.00 │ 4000.00 │
└────────────┴───────┴───────────┴─────────┴─────────┴─────────┘
(2 rows)
Комментарии:
1. Здравствуйте, спасибо за ответ и так быстро. Если я хочу поставить «-«, если нет значения для частичного или наличного платежа, как? В любом случае ваш ответ уже спас мои дни. Большое вам спасибо.