我有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
我试图将一个值放入新列现金,如果付款是现金,并且Sum(付款部分)在Partial上然后计算余额,如果仍未偿还,则我丢失了查询。
我不知道如何构建此查询..请帮助我。
答案 0 :(得分: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)